RIT (Repetitive Interrupt Timer) Demo.
Dependencies: mbed RIT FastAnalogIn
Revision 1:508cd706654a, committed 2022-01-18
- Comitter:
- wvd_vegt
- Date:
- Tue Jan 18 17:16:53 2022 +0000
- Parent:
- 0:faa449765bcc
- Commit message:
- Combined with FastAnalogIn
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/FastAnalogIn.lib Tue Jan 18 17:16:53 2022 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Sissors/code/FastAnalogIn/#46fbc645de4d
--- a/mbed.bld Fri Mar 11 10:30:32 2011 +0000 +++ b/mbed.bld Tue Jan 18 17:16:53 2022 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912 +http://mbed.org/users/mbed_official/code/mbed/builds/0ab6a29f35bf \ No newline at end of file
--- a/rit_demo.cpp Fri Mar 11 10:30:32 2011 +0000
+++ b/rit_demo.cpp Tue Jan 18 17:16:53 2022 +0000
@@ -22,47 +22,169 @@
#include "mbed.h"
#include "RIT.h"
+#include "FastAnalogIn.h"
//We'll be using the Usb Serial port
Serial serial(USBTX, USBRX); //tx, rx
DigitalOut rit_led(LED3);
+FastAnalogIn a1(p19,true); //Ain1 - Peel Force
+FastAnalogIn a2(p20,true); //Ain2 - Seal Force
+
+#define SAMPLE_BUFFER_LENGTH 1000
+
volatile uint32_t rithits = 0; //timer1 stops when timer1hits==imer1loop
+volatile bool done = false;
+volatile short flip = 1;
+
Timer rit_timing;
-void RIT_IRQHandler(void) {
- //Flash Led.
- rit_led=!rit_led;
+static short adc1[SAMPLE_BUFFER_LENGTH] __attribute__ ((aligned (64)));
+static short adc2[SAMPLE_BUFFER_LENGTH] __attribute__ ((aligned (64)));
+static int Timing01[SAMPLE_BUFFER_LENGTH];
- //Count Hits.
- rithits++;
+void RIT_IRQHandler(void)
+{
+ if (!done) {
+ Timing01[rithits] = rit_timing.read_us();
+ if (flip%2) {
+ adc1[rithits]=a1.read_u16();
+ } else {
+ adc2[rithits]=a2.read_u16();
+
+ //Count Hits.
+ rithits++;
+ }
+
+ flip ++;
+
+ //Flash Led.
+ //rit_led=!rit_led;
+ done = rithits==SAMPLE_BUFFER_LENGTH;
+ }
}
+/*
+LPC_TIM1->IR = 0x1UL; // Re-enabled
+
+Timing01[timer1hits] = adc_stamper.read_us();
+
+//TODO Toggle Channel Mask (01 to 01 in ADCR).
+// Take twice the number of samples at half the sampling time
+// So 2000 samples (1000+1000) at 0.5ms -> 1000 pairs in 1 sec.
+
+switch (LPC_ADC->ADSTAT & (t_ch0|t_ch1))
+{
+case t_ch0:
+ Samples0[timer1hits] = LPC_ADC->ADDR4;
+ break;
+}
+}
+*/
+//https://developer.mbed.org/forum/mbed/topic/370/
RIT rit(1000);
-int main() {
+//https://developer.mbed.org/handbook/Ticker
+//Ticker ticker;
+
+//void tock()
+//{
+// Timing01[rithits] = rit_timing.read_us();
+//}
+
+int main()
+{
// Set the Baudrate.
serial.baud(115200);
- //rit.setup_ms(100);
+ rit.setup_us(10);
rit.append(RIT_IRQHandler);
+ rit.enable();
rit_timing.start();
- rit.enable();
- for (int i=0;i<20;i++) {
- printf("COUNTER=%d\r\n", LPC_RIT->RICOUNTER);
- wait(0.2);
+
+ while (!done) {
+ // wait(0.001);
}
+
+ rit_timing.stop();
rit.disable();
- rit_timing.stop();
-
- printf("COMPVAL=%d\r\n", LPC_RIT->RICOMPVAL);
- printf("COUNTER=%d\r\n", LPC_RIT->RICOUNTER);
- printf("HITS=%d\r\n", rithits);
- printf("ELAPSED=%d ms\r\n", rit_timing.read_ms());
rit.unappend();
+
+ for (int i=0; i<SAMPLE_BUFFER_LENGTH; i++) {
+ serial.printf("%3d %6.3f - %6d - %6d\r\n",i, Timing01[i]/1000.0f, adc1[i], adc2[i]);
+ }
+ serial.printf("%3d %6.3f - %6d - %6d\r\n",0, Timing01[0]/1000.0f, adc1[0], adc2[0]);
+
+ printf("COMPVAL=%d\r\n", LPC_RIT->RICOMPVAL); // 959 (960-1)
+ printf("COUNTER=%d\r\n", LPC_RIT->RICOUNTER); // 807?
+ printf("HITS=%d\r\n", rithits);
+ printf("ELAPSED=%0.3f ms\r\n", rit_timing.read_us()/1000.0f);
+ printf("ELAPSED=%0.3f ms\r\n", (Timing01[SAMPLE_BUFFER_LENGTH-1]-Timing01[0])/1000.0f);
+
+ /*
+ //
+ printf("Requested max sample rate is %u, actual max sample rate is %u.\r\n",
+ SAMPLE_RATE, adc.actual_sample_rate());
+
+ adc.startmode(0,0);
+
+ adc.burst(1);
+
+ adc.setup(p15,1);
+ adc.setup(p16,1);
+
+ //For burst mode, only one interrupt is required
+ //which can be on any enabled pin. We have enabled all
+ //of them here.
+ adc.interrupt_state(p15,1);
+ adc_timing.reset();
+ adc_timing.start();
+
+ //10 ms sample time.
+ rit.setup_ms(10);
+
+ //Clear ADC Storage stuff...
+ adchits = 0;
+ memset(Samples0, 0,sizeof(Samples0));
+ memset(Samples1, 0,sizeof(Samples1));
+
+ rit.append(Adc_IRQHandler);
+
+ rit_timing.reset();
+ rit_timing.start();
+
+ rit.enable();
+
+ //To be sure...
+ while (adchits!=MAX_SAMPLES) {
+ wait(0.01);
+ }
+
+ rit.disable();
+
+ rit_timing.stop();
+
+ rit.unappend();
+
+ for (int i=0; i < MAX_SAMPLES; i++) {
+ printf("%04d=%04d | %04d @ %08d\r\n", i, Samples0[i], Samples1[i], Timing01[i]);
+ }
+
+ printf("ELAPSED=%0.2f ms\r\n", rit_timing.read_us()/1000);
+ printf("HITS=%d\r\n", adchits);
+
+ adc.burst(0);
+
+ adc.setup(p15,0);
+ adc.setup(p16,0);
+
+ adc.interrupt_state(p15,0);
+
+ adc_timing.stop();
+ */
}
\ No newline at end of file