test

Dependencies:   MODDMA MODSERIAL mbed

Fork of IRIS_MBED by IRIS

Committer:
JonathanAshworth
Date:
Mon Mar 16 15:38:37 2015 +0000
Revision:
3:074db974b47a
Parent:
2:28501c7700f7
Child:
4:1017848d2fe1
Now reset the timer after receiving each byte rather than only on the first byte of each period

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JonathanAshworth 0:2676c97df44e 1 #include "mbed.h"
JonathanAshworth 0:2676c97df44e 2 #include "main.h"
JonathanAshworth 0:2676c97df44e 3 #include "RIT.h"
JonathanAshworth 0:2676c97df44e 4
JonathanAshworth 0:2676c97df44e 5 #define TIMEOUT_MESSAGE "MBED detected a timeout - eStop!\n\n\n\n"
JonathanAshworth 0:2676c97df44e 6 #define USB_BUFFER_SIZE 1024
JonathanAshworth 0:2676c97df44e 7
JonathanAshworth 0:2676c97df44e 8 Serial serial(USBTX, USBRX);
JonathanAshworth 0:2676c97df44e 9 Timer usbTimer;
JonathanAshworth 2:28501c7700f7 10 RIT usbRIT(110);
JonathanAshworth 0:2676c97df44e 11 Flags flags;
JonathanAshworth 0:2676c97df44e 12
JonathanAshworth 0:2676c97df44e 13 char txBuffer[USB_BUFFER_SIZE] = {0};
JonathanAshworth 0:2676c97df44e 14 char rxBuffer[USB_BUFFER_SIZE] = {0};
JonathanAshworth 0:2676c97df44e 15
JonathanAshworth 0:2676c97df44e 16 int main(void) {
JonathanAshworth 0:2676c97df44e 17
JonathanAshworth 0:2676c97df44e 18 flags.rxNewData = 0;
JonathanAshworth 0:2676c97df44e 19 flags.txSentData = 0;
JonathanAshworth 0:2676c97df44e 20 flags.usbTimeout = 0;
JonathanAshworth 0:2676c97df44e 21
JonathanAshworth 0:2676c97df44e 22 serial.baud(115200);
JonathanAshworth 0:2676c97df44e 23
JonathanAshworth 0:2676c97df44e 24 //NVIC_SetPriority(TIMER3_IRQn, 1);//priority 1
JonathanAshworth 0:2676c97df44e 25 //NVIC_SetPriority(USB_IRQn, 2);//priority 2
JonathanAshworth 0:2676c97df44e 26
JonathanAshworth 0:2676c97df44e 27 NVIC_SetPriority( NonMaskableInt_IRQn, 100 );
JonathanAshworth 0:2676c97df44e 28 NVIC_SetPriority(MemoryManagement_IRQn, 100);
JonathanAshworth 0:2676c97df44e 29
JonathanAshworth 0:2676c97df44e 30 NVIC_SetPriority(BusFault_IRQn, 100);
JonathanAshworth 0:2676c97df44e 31 NVIC_SetPriority(UsageFault_IRQn, 100);
JonathanAshworth 0:2676c97df44e 32 NVIC_SetPriority(SVCall_IRQn, 100);
JonathanAshworth 0:2676c97df44e 33 NVIC_SetPriority(DebugMonitor_IRQn, 100);
JonathanAshworth 0:2676c97df44e 34 NVIC_SetPriority(PendSV_IRQn, 100);
JonathanAshworth 0:2676c97df44e 35 NVIC_SetPriority(SysTick_IRQn, 50);
JonathanAshworth 0:2676c97df44e 36 NVIC_SetPriority(WDT_IRQn, 100);
JonathanAshworth 0:2676c97df44e 37 NVIC_SetPriority(TIMER0_IRQn, 85);
JonathanAshworth 0:2676c97df44e 38 NVIC_SetPriority(TIMER1_IRQn, 85);
JonathanAshworth 0:2676c97df44e 39 NVIC_SetPriority(TIMER2_IRQn, 85);
JonathanAshworth 0:2676c97df44e 40 NVIC_SetPriority(TIMER3_IRQn, 85);
JonathanAshworth 0:2676c97df44e 41 NVIC_SetPriority(UART0_IRQn, 100);
JonathanAshworth 0:2676c97df44e 42 NVIC_SetPriority(UART1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 43 NVIC_SetPriority(UART2_IRQn, 100);
JonathanAshworth 0:2676c97df44e 44 NVIC_SetPriority(UART3_IRQn, 100);
JonathanAshworth 0:2676c97df44e 45
JonathanAshworth 0:2676c97df44e 46 NVIC_SetPriority(PWM1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 47 NVIC_SetPriority(I2C0_IRQn, 100);
JonathanAshworth 0:2676c97df44e 48 NVIC_SetPriority(I2C1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 49 NVIC_SetPriority(I2C2_IRQn, 100);
JonathanAshworth 0:2676c97df44e 50 NVIC_SetPriority(SPI_IRQn, 100);
JonathanAshworth 0:2676c97df44e 51 NVIC_SetPriority(SSP0_IRQn, 100);
JonathanAshworth 0:2676c97df44e 52 NVIC_SetPriority(SSP1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 53 NVIC_SetPriority(PLL0_IRQn, 100);
JonathanAshworth 0:2676c97df44e 54 NVIC_SetPriority(RTC_IRQn, 100);
JonathanAshworth 0:2676c97df44e 55 NVIC_SetPriority(EINT0_IRQn, 100);
JonathanAshworth 0:2676c97df44e 56 NVIC_SetPriority(EINT1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 57
JonathanAshworth 0:2676c97df44e 58 NVIC_SetPriority(EINT2_IRQn, 100);
JonathanAshworth 0:2676c97df44e 59 NVIC_SetPriority(EINT3_IRQn, 100);
JonathanAshworth 0:2676c97df44e 60 NVIC_SetPriority(ADC_IRQn, 100);
JonathanAshworth 0:2676c97df44e 61 NVIC_SetPriority(BOD_IRQn, 100);
JonathanAshworth 0:2676c97df44e 62 NVIC_SetPriority(USB_IRQn, 100);
JonathanAshworth 0:2676c97df44e 63 NVIC_SetPriority(CAN_IRQn, 100);
JonathanAshworth 0:2676c97df44e 64 NVIC_SetPriority(DMA_IRQn, 100);
JonathanAshworth 0:2676c97df44e 65
JonathanAshworth 0:2676c97df44e 66 NVIC_SetPriority(I2S_IRQn, 100);
JonathanAshworth 0:2676c97df44e 67 NVIC_SetPriority(ENET_IRQn, 100);
JonathanAshworth 0:2676c97df44e 68 NVIC_SetPriority(RIT_IRQn, 1);
JonathanAshworth 0:2676c97df44e 69 NVIC_SetPriority(MCPWM_IRQn, 100);
JonathanAshworth 0:2676c97df44e 70 NVIC_SetPriority(QEI_IRQn, 100);
JonathanAshworth 0:2676c97df44e 71 NVIC_SetPriority(PLL1_IRQn, 100);
JonathanAshworth 0:2676c97df44e 72
JonathanAshworth 0:2676c97df44e 73 serial.attach(&serialRx_ISR, Serial::RxIrq);
JonathanAshworth 0:2676c97df44e 74 usbRIT.append(&usbTimer_ISR);
JonathanAshworth 0:2676c97df44e 75 usbRIT.disable();
JonathanAshworth 0:2676c97df44e 76
JonathanAshworth 0:2676c97df44e 77 char responseData[USB_BUFFER_SIZE] = {0};
JonathanAshworth 0:2676c97df44e 78 char requestData[USB_BUFFER_SIZE] = {0};
JonathanAshworth 0:2676c97df44e 79
JonathanAshworth 0:2676c97df44e 80 //LPC_TIMER3->;
JonathanAshworth 0:2676c97df44e 81
JonathanAshworth 0:2676c97df44e 82 //setup ISRs
JonathanAshworth 0:2676c97df44e 83
JonathanAshworth 0:2676c97df44e 84 while(1) {
JonathanAshworth 0:2676c97df44e 85 if (flags.usbTimeout) {
JonathanAshworth 0:2676c97df44e 86 usbTimeout();
JonathanAshworth 0:2676c97df44e 87 }
JonathanAshworth 0:2676c97df44e 88 if (flags.rxNewData) {
JonathanAshworth 0:2676c97df44e 89 memcpy(requestData, rxBuffer, USB_BUFFER_SIZE); //requestData = rxBuffer;
JonathanAshworth 0:2676c97df44e 90 memset(rxBuffer, 0, USB_BUFFER_SIZE); //reset rx buffer
JonathanAshworth 0:2676c97df44e 91
JonathanAshworth 0:2676c97df44e 92 //deconstruct and validate request
JonathanAshworth 0:2676c97df44e 93
JonathanAshworth 0:2676c97df44e 94 //construct response:
JonathanAshworth 0:2676c97df44e 95 memcpy(responseData, requestData, USB_BUFFER_SIZE); //just echo request back for now
JonathanAshworth 0:2676c97df44e 96
JonathanAshworth 0:2676c97df44e 97 memcpy(txBuffer, responseData, USB_BUFFER_SIZE); //txBuffer = responseData;
JonathanAshworth 0:2676c97df44e 98
JonathanAshworth 0:2676c97df44e 99 serialTx();
JonathanAshworth 0:2676c97df44e 100
JonathanAshworth 0:2676c97df44e 101 flags.rxNewData = 0;
JonathanAshworth 0:2676c97df44e 102 }
JonathanAshworth 0:2676c97df44e 103 }
JonathanAshworth 0:2676c97df44e 104 }
JonathanAshworth 0:2676c97df44e 105
JonathanAshworth 0:2676c97df44e 106 void serialTx (void) {
JonathanAshworth 0:2676c97df44e 107 __disable_irq();
JonathanAshworth 0:2676c97df44e 108 char buffPntr;
JonathanAshworth 0:2676c97df44e 109 bool terminated = 0;
JonathanAshworth 0:2676c97df44e 110 for(buffPntr=0; buffPntr<4; buffPntr++) {
JonathanAshworth 0:2676c97df44e 111 serial.putc(txBuffer[buffPntr]);
JonathanAshworth 0:2676c97df44e 112 }
JonathanAshworth 0:2676c97df44e 113 while ((!terminated)&&(buffPntr != USB_BUFFER_SIZE-1)) {
JonathanAshworth 0:2676c97df44e 114 if ((txBuffer[buffPntr-3] == 0x0A)&&(txBuffer[buffPntr-2] == 0x0A)&&(txBuffer[buffPntr-1] == 0x0A)&&(txBuffer[buffPntr] == 0x0A)) {
JonathanAshworth 0:2676c97df44e 115 terminated = 1;
JonathanAshworth 0:2676c97df44e 116 }
JonathanAshworth 0:2676c97df44e 117 else {
JonathanAshworth 0:2676c97df44e 118 serial.putc(txBuffer[buffPntr]);
JonathanAshworth 0:2676c97df44e 119 }
JonathanAshworth 0:2676c97df44e 120 buffPntr++;
JonathanAshworth 0:2676c97df44e 121 }
JonathanAshworth 0:2676c97df44e 122 //send data from tx buffer
JonathanAshworth 0:2676c97df44e 123 memset(txBuffer, 0, USB_BUFFER_SIZE); //reset tx buffer
JonathanAshworth 0:2676c97df44e 124 flags.txSentData = 1;
JonathanAshworth 0:2676c97df44e 125 __enable_irq();
JonathanAshworth 0:2676c97df44e 126 }
JonathanAshworth 0:2676c97df44e 127
JonathanAshworth 0:2676c97df44e 128 void usbTimeout(void) {
JonathanAshworth 0:2676c97df44e 129 memcpy(txBuffer, TIMEOUT_MESSAGE, USB_BUFFER_SIZE); //send eStop over usb serial
JonathanAshworth 0:2676c97df44e 130 serialTx();
JonathanAshworth 0:2676c97df44e 131 shutdown();
JonathanAshworth 0:2676c97df44e 132 __disable_irq();
JonathanAshworth 0:2676c97df44e 133 while(1) {;} //remain here until hardware reset
JonathanAshworth 0:2676c97df44e 134 }
JonathanAshworth 0:2676c97df44e 135
JonathanAshworth 0:2676c97df44e 136 void shutdown(void) {
JonathanAshworth 0:2676c97df44e 137 //turn off each peripheral safely
JonathanAshworth 0:2676c97df44e 138 }
JonathanAshworth 0:2676c97df44e 139
JonathanAshworth 0:2676c97df44e 140
JonathanAshworth 0:2676c97df44e 141 /**************** ISRs ****************/
JonathanAshworth 0:2676c97df44e 142
JonathanAshworth 0:2676c97df44e 143 void serialRx_ISR(void) {
JonathanAshworth 0:2676c97df44e 144 char buffPntr = 0;
JonathanAshworth 0:2676c97df44e 145 bool terminated = 0;
JonathanAshworth 0:2676c97df44e 146
JonathanAshworth 0:2676c97df44e 147 usbRIT.disable();
JonathanAshworth 0:2676c97df44e 148 usbTimer.stop();
JonathanAshworth 0:2676c97df44e 149 usbTimer.reset();
JonathanAshworth 0:2676c97df44e 150 usbTimer.start();
JonathanAshworth 0:2676c97df44e 151 usbRIT.enable();
JonathanAshworth 1:ccecc816c5e8 152 while ((buffPntr != USB_BUFFER_SIZE-1)&&(!flags.usbTimeout)) {
JonathanAshworth 1:ccecc816c5e8 153 if (buffPntr >= 3) {
JonathanAshworth 1:ccecc816c5e8 154 if ((rxBuffer[buffPntr-3] == 0x0A)&&(rxBuffer[buffPntr-2] == 0x0A)&&(rxBuffer[buffPntr-1] == 0x0A)&&(rxBuffer[buffPntr] == 0x0A)) {
JonathanAshworth 1:ccecc816c5e8 155 terminated = 1;
JonathanAshworth 0:2676c97df44e 156 }
JonathanAshworth 0:2676c97df44e 157 }
JonathanAshworth 0:2676c97df44e 158 if (!terminated) {
JonathanAshworth 1:ccecc816c5e8 159 while((!serial.readable())&&(!flags.usbTimeout)) {;}
JonathanAshworth 1:ccecc816c5e8 160 if (serial.readable()) {
JonathanAshworth 3:074db974b47a 161 usbRIT.disable();
JonathanAshworth 3:074db974b47a 162 usbTimer.stop();
JonathanAshworth 3:074db974b47a 163 usbTimer.reset();
JonathanAshworth 3:074db974b47a 164 usbTimer.start();
JonathanAshworth 3:074db974b47a 165 usbRIT.enable();
JonathanAshworth 1:ccecc816c5e8 166 rxBuffer[buffPntr] = serial.getc();//whenDataReady, insert into rx buffer
JonathanAshworth 1:ccecc816c5e8 167 }
JonathanAshworth 0:2676c97df44e 168 }
JonathanAshworth 0:2676c97df44e 169 else {
JonathanAshworth 1:ccecc816c5e8 170 rxBuffer[buffPntr] = 0;
JonathanAshworth 0:2676c97df44e 171 }
JonathanAshworth 1:ccecc816c5e8 172 buffPntr++;
JonathanAshworth 1:ccecc816c5e8 173 }
JonathanAshworth 1:ccecc816c5e8 174 if (!terminated) {
JonathanAshworth 1:ccecc816c5e8 175 flags.usbTimeout = 1; //no valid termination seen
JonathanAshworth 0:2676c97df44e 176 }
JonathanAshworth 0:2676c97df44e 177 else {
JonathanAshworth 1:ccecc816c5e8 178 flags.rxNewData = 1;
JonathanAshworth 0:2676c97df44e 179 }
JonathanAshworth 0:2676c97df44e 180 flags.rxNewData = 1;
JonathanAshworth 0:2676c97df44e 181 }
JonathanAshworth 0:2676c97df44e 182
JonathanAshworth 0:2676c97df44e 183 void usbTimer_ISR(void) {
JonathanAshworth 0:2676c97df44e 184 usbRIT.disable();
JonathanAshworth 0:2676c97df44e 185 usbTimer.stop();
JonathanAshworth 0:2676c97df44e 186 if ((flags.rxNewData) && (flags.txSentData)) {
JonathanAshworth 0:2676c97df44e 187 usbTimer.reset();
JonathanAshworth 0:2676c97df44e 188 usbTimer.start();
JonathanAshworth 0:2676c97df44e 189 usbRIT.enable();
JonathanAshworth 0:2676c97df44e 190 flags.rxNewData = 0;
JonathanAshworth 0:2676c97df44e 191 flags.txSentData = 0;
JonathanAshworth 0:2676c97df44e 192 }
JonathanAshworth 0:2676c97df44e 193 else {
JonathanAshworth 0:2676c97df44e 194 flags.usbTimeout = 1;
JonathanAshworth 0:2676c97df44e 195 }
JonathanAshworth 0:2676c97df44e 196 }