I'm using a Tiva C series lanuchpad (TM4C123G) and coding in Energia. I'm using an external ADC (Analog to Digital converter) and sampling incoming analog data of the ADC using the Tiva. The ADC is clocked at ~1.4MHz. But the code is taking unusually long to get processed and giving a poor sampling rate of a few hundred KHz. And with a Serial.println() to write the output, it falls down to ~ 100Hz.
We're measuring the sampling rate by generating a square wave of the sampling frequency:
#include <tm4c123ge6pm.h> #include <stdint.h> #include <stdbool.h> #include <pin_map.h> #include <sysctl.h> int db0 = PB_3; int db1 = PC_4; int db2 = PC_5; int db3 = PC_6; int db4 = PC_7; int db5 = PD_6; int db6 = PD_7; int db7 = PF_4; int cs = PB_5; int rd = PD_1; int wr = PD_0; int out = PD_3; int a = 0; int count = 1; int b; boolean flag = 0; void setup() { SysCtlClockSet(SYSCTL_SYSDIV_2_5|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ); //SysCtlClockSet(SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_16MHZ|SYSCTL_SYSDIV_2_5); pinMode(db0, INPUT); pinMode(db1, INPUT); pinMode(db2, INPUT); pinMode(db3, INPUT); pinMode(db4, INPUT); pinMode(db5, INPUT); pinMode(db6, INPUT); pinMode(db7, INPUT); pinMode(out, OUTPUT); Serial.begin(9600); pinMode(cs, OUTPUT); pinMode(rd, OUTPUT); pinMode(wr, OUTPUT); pinMode(out, OUTPUT); pinMode(db0, INPUT); pinMode(db1, INPUT); pinMode(db2, INPUT); pinMode(db3, INPUT); pinMode(db4, INPUT); pinMode(db5, INPUT); pinMode(db6, INPUT); pinMode(db7, INPUT); //Code of initialzation... //Step C digitalWrite(cs, LOW); delay(100); //has to be type unsigned long digitalWrite(out,HIGH); b=1; } void loop() { flag = !flag;
digitalWrite(out,flag); a= digitalRead(db0); count = 1; a = 0; a = a+ digitalRead(db0)*count; count = count*2; a = a+ digitalRead(db1)*count; count = count*2; a = a+ digitalRead(db2)*count; count = count*2; a = a+ digitalRead(db3)*count; count = count*2; a = a+ digitalRead(db4)*count; count = count*2; a = a+ digitalRead(db5)*count; count = count*2; a = a+ digitalRead(db6)*count; count = count*2; a = a+ digitalRead(db7)*count; count = count*2; Serial.println(a); //Serial.println(SysCtlClockGet()); } Why do you think it is so slow? Even with no command in the loop, it shows a square wave of a few hundred KHz only.