IRQ fix

Committer:
burocketteam
Date:
Mon Apr 09 23:31:30 2012 +0000
Revision:
1:6fddb8411725

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
burocketteam 1:6fddb8411725 1 #include "mbed.h"
burocketteam 1:6fddb8411725 2 #include "rtos.h"
burocketteam 1:6fddb8411725 3 #include "burtdaq.h"
burocketteam 1:6fddb8411725 4 #include <vector>
burocketteam 1:6fddb8411725 5 #include "FastIO.h"
burocketteam 1:6fddb8411725 6 #include <stdio.h> // printf
burocketteam 1:6fddb8411725 7 #include <string.h> // strcat
burocketteam 1:6fddb8411725 8 #include <stdlib.h> // strtol
burocketteam 1:6fddb8411725 9
burocketteam 1:6fddb8411725 10 DigitalOut led1(LED1);
burocketteam 1:6fddb8411725 11 DigitalOut led2(LED2);
burocketteam 1:6fddb8411725 12 DigitalOut led3(LED3);
burocketteam 1:6fddb8411725 13 DigitalOut led4(LED4);
burocketteam 1:6fddb8411725 14 Serial pc(USBTX,USBRX);
burocketteam 1:6fddb8411725 15 //Serial xbee(XBEETX,XBEERX);
burocketteam 1:6fddb8411725 16
burocketteam 1:6fddb8411725 17 bool led4_FLAG;
burocketteam 1:6fddb8411725 18
burocketteam 1:6fddb8411725 19 //Queue<uint8_t, 50> queue;
burocketteam 1:6fddb8411725 20
burocketteam 1:6fddb8411725 21 #define kDisplayWidth 32
burocketteam 1:6fddb8411725 22 char* pBinFill(long int x,char *so, char fillChar)
burocketteam 1:6fddb8411725 23 { // fill in array from right to left
burocketteam 1:6fddb8411725 24 char s[kDisplayWidth+1];
burocketteam 1:6fddb8411725 25 int i=kDisplayWidth;
burocketteam 1:6fddb8411725 26 s[i--]=0x00; // terminate string
burocketteam 1:6fddb8411725 27 do
burocketteam 1:6fddb8411725 28 { // fill in array from right to left
burocketteam 1:6fddb8411725 29 s[i--]=(x & 1) ? '1':'0';
burocketteam 1:6fddb8411725 30 x>>=1; // shift right 1 bit
burocketteam 1:6fddb8411725 31 } while( x > 0);
burocketteam 1:6fddb8411725 32 while(i>=0) s[i--]=fillChar; // fill with fillChar
burocketteam 1:6fddb8411725 33 sprintf(so,"%s",s);
burocketteam 1:6fddb8411725 34 return so;
burocketteam 1:6fddb8411725 35 }
burocketteam 1:6fddb8411725 36
burocketteam 1:6fddb8411725 37
burocketteam 1:6fddb8411725 38 void bridgeReader(void const *argument) {
burocketteam 1:6fddb8411725 39 SPI spia(NC, SPIA_MISO, SPIA_CLK);
burocketteam 1:6fddb8411725 40 spia.format(16);
burocketteam 1:6fddb8411725 41 spia.frequency(1000000);
burocketteam 1:6fddb8411725 42 //DigitalOut spia_mosi(SPIA_MOSI);
burocketteam 1:6fddb8411725 43 FastOut<SPIA_MOSI> spia_mosi;
burocketteam 1:6fddb8411725 44
burocketteam 1:6fddb8411725 45 FastPortOut<Port0, SPIA_CS_PORT_MASK> spiaCSPort;
burocketteam 1:6fddb8411725 46 //PortOut spiaCSPort(Port0, SPIA_CS_PORT_MASK);
burocketteam 1:6fddb8411725 47 unsigned int bridgeCSPinMasks[5] = {SPIA_P1_CS_PORT_MASK, SPIA_P2_CS_PORT_MASK, SPIA_P3_CS_PORT_MASK, SPIA_P4_CS_PORT_MASK};
burocketteam 1:6fddb8411725 48 int deviceCount = 4;
burocketteam 1:6fddb8411725 49
burocketteam 1:6fddb8411725 50 spiaCSPort = SPIA_CS_PORT_MASK;
burocketteam 1:6fddb8411725 51
burocketteam 1:6fddb8411725 52 uint16_t outputs[4] = {0x0f0f, 0xf0f0, 0x0000, 0x0000};
burocketteam 1:6fddb8411725 53 //bridgeCSPins = 3;
burocketteam 1:6fddb8411725 54 printf("ENTERING READ LOOP\n");
burocketteam 1:6fddb8411725 55 while(true) {
burocketteam 1:6fddb8411725 56 __disable_irq();
burocketteam 1:6fddb8411725 57 led2 = 1;
burocketteam 1:6fddb8411725 58 // READ BRIDGES
burocketteam 1:6fddb8411725 59 spia_mosi = 1;
burocketteam 1:6fddb8411725 60 int i = 0; // This constitutes ROUGHLY a 500ns delay
burocketteam 1:6fddb8411725 61 while(i<10)
burocketteam 1:6fddb8411725 62 i++;
burocketteam 1:6fddb8411725 63 for(i=0; i<deviceCount; i++){
burocketteam 1:6fddb8411725 64 spiaCSPort = ~bridgeCSPinMasks[i];
burocketteam 1:6fddb8411725 65 outputs[i] = spia.write(0x0);
burocketteam 1:6fddb8411725 66 }
burocketteam 1:6fddb8411725 67 spiaCSPort = SPIA_CS_PORT_MASK;
burocketteam 1:6fddb8411725 68 //spiaCSPort = 1;
burocketteam 1:6fddb8411725 69 spia_mosi = 0;
burocketteam 1:6fddb8411725 70 // END READING
burocketteam 1:6fddb8411725 71
burocketteam 1:6fddb8411725 72 printf("%u, %u, %u, %u\n",outputs[0],outputs[1],outputs[2],outputs[3]);
burocketteam 1:6fddb8411725 73 led2 = 0;
burocketteam 1:6fddb8411725 74 __enable_irq();
burocketteam 1:6fddb8411725 75 Thread::wait(5000);
burocketteam 1:6fddb8411725 76 }
burocketteam 1:6fddb8411725 77 }
burocketteam 1:6fddb8411725 78 void tcReader(void const *argument) {
burocketteam 1:6fddb8411725 79 SPI spib(SPIB_MOSI, SPIB_MISO, SPIB_CLK);
burocketteam 1:6fddb8411725 80 spib.format(16);
burocketteam 1:6fddb8411725 81 spib.frequency(1000000);
burocketteam 1:6fddb8411725 82
burocketteam 1:6fddb8411725 83 DigitalOut spibCSPins[] = {SPIB_P1_CS, SPIB_P2_CS, SPIB_P3_CS};
burocketteam 1:6fddb8411725 84 spibCSPins[0]=1;
burocketteam 1:6fddb8411725 85 spibCSPins[1]=1;
burocketteam 1:6fddb8411725 86 spibCSPins[2]=1;
burocketteam 1:6fddb8411725 87
burocketteam 1:6fddb8411725 88 int numTCs = 3;
burocketteam 1:6fddb8411725 89 uint32_t rawTcData[3] = {0,0,0};
burocketteam 1:6fddb8411725 90 uint32_t tcData[3] = {0,0,0};
burocketteam 1:6fddb8411725 91 uint32_t ambientData[3] = {0,0,0};
burocketteam 1:6fddb8411725 92
burocketteam 1:6fddb8411725 93 float humanTcData[3] = {0,0,0};
burocketteam 1:6fddb8411725 94 float humanAmbientData[3] = {0,0,0};
burocketteam 1:6fddb8411725 95
burocketteam 1:6fddb8411725 96 uint32_t buffer = 0;
burocketteam 1:6fddb8411725 97 char so[kDisplayWidth+1];
burocketteam 1:6fddb8411725 98 while (true) {
burocketteam 1:6fddb8411725 99 __disable_irq();
burocketteam 1:6fddb8411725 100 led3 = 1;
burocketteam 1:6fddb8411725 101 for(int i=0; i<numTCs; i++){
burocketteam 1:6fddb8411725 102 rawTcData[i] = 0;
burocketteam 1:6fddb8411725 103 spibCSPins[i] = 0;
burocketteam 1:6fddb8411725 104 buffer = spib.write(0);
burocketteam 1:6fddb8411725 105 //printf("%s\n",binary_fmt(buffer,tmp));
burocketteam 1:6fddb8411725 106 rawTcData[i] = (buffer << 16);
burocketteam 1:6fddb8411725 107 buffer = spib.write(0);
burocketteam 1:6fddb8411725 108 rawTcData[i] |= (buffer);
burocketteam 1:6fddb8411725 109 spibCSPins[i] = 1;
burocketteam 1:6fddb8411725 110 }
burocketteam 1:6fddb8411725 111 //printf("%s %s %s\n", byte_to_binary(tcData[0]), byte_to_binary(tcData[1]), byte_to_binary(tcData[2]));
burocketteam 1:6fddb8411725 112 //printf("Data is: %s %s %s\n",pBinFill(tcData[0], so, '0'), pBinFill(tcData[1], so, '0'), pBinFill(tcData[2], so, '0'));
burocketteam 1:6fddb8411725 113
burocketteam 1:6fddb8411725 114 for(int i=0; i<numTCs; i++){
burocketteam 1:6fddb8411725 115 tcData[i] = ((rawTcData[i] & 0xFFFC0000) >> 18);
burocketteam 1:6fddb8411725 116 ambientData[i] = ((rawTcData[i] & 0xFFF0) >> 4);
burocketteam 1:6fddb8411725 117 humanTcData[i] = (float) tcData[i] * .25;
burocketteam 1:6fddb8411725 118 humanAmbientData[i] = (float) ambientData[i]*.0625;
burocketteam 1:6fddb8411725 119 printf("Thermocouple %d ambient: %f, tc:%f\n",i,humanAmbientData[i],humanTcData[i]);
burocketteam 1:6fddb8411725 120 }
burocketteam 1:6fddb8411725 121 led3=0;
burocketteam 1:6fddb8411725 122 __enable_irq();
burocketteam 1:6fddb8411725 123 Thread::wait(2000);
burocketteam 1:6fddb8411725 124 }
burocketteam 1:6fddb8411725 125 }
burocketteam 1:6fddb8411725 126
burocketteam 1:6fddb8411725 127
burocketteam 1:6fddb8411725 128 void xbeeISR() {
burocketteam 1:6fddb8411725 129
burocketteam 1:6fddb8411725 130 NVIC_DisableIRQ(UART0_IRQn);
burocketteam 1:6fddb8411725 131 led4=!led4;
burocketteam 1:6fddb8411725 132 uint32_t iir = LPC_UART0->RBR;
burocketteam 1:6fddb8411725 133 NVIC_EnableIRQ(UART0_IRQn);
burocketteam 1:6fddb8411725 134 return;
burocketteam 1:6fddb8411725 135 }
burocketteam 1:6fddb8411725 136
burocketteam 1:6fddb8411725 137 void blinkThread(void const *argument)
burocketteam 1:6fddb8411725 138 {
burocketteam 1:6fddb8411725 139 while(1)
burocketteam 1:6fddb8411725 140 {
burocketteam 1:6fddb8411725 141 led1=!led1;
burocketteam 1:6fddb8411725 142 Thread::wait(500);
burocketteam 1:6fddb8411725 143 }
burocketteam 1:6fddb8411725 144
burocketteam 1:6fddb8411725 145
burocketteam 1:6fddb8411725 146 return;
burocketteam 1:6fddb8411725 147 }
burocketteam 1:6fddb8411725 148 void xbeeTestThread(void const *argument)
burocketteam 1:6fddb8411725 149 {
burocketteam 1:6fddb8411725 150 pc.attach(&xbeeISR,Serial::RxIrq);
burocketteam 1:6fddb8411725 151 while(1)
burocketteam 1:6fddb8411725 152 {
burocketteam 1:6fddb8411725 153 Thread::wait(500);
burocketteam 1:6fddb8411725 154 }
burocketteam 1:6fddb8411725 155
burocketteam 1:6fddb8411725 156 }
burocketteam 1:6fddb8411725 157 int main() {
burocketteam 1:6fddb8411725 158 // Serial pc(USBTX,USBRX);
burocketteam 1:6fddb8411725 159 led4_FLAG = false;
burocketteam 1:6fddb8411725 160 pc.printf("Starting reader\n");
burocketteam 1:6fddb8411725 161 pc.attach(&xbeeISR,Serial::RxIrq);
burocketteam 1:6fddb8411725 162 //Ticker ticker;
burocketteam 1:6fddb8411725 163 //ticker.attach(blinkThread,1.0);
burocketteam 1:6fddb8411725 164 // Thread bridgeReader1(bridgeReader);
burocketteam 1:6fddb8411725 165 // Thread tcReader1(tcReader);
burocketteam 1:6fddb8411725 166 //Thread actuatorController1(actuatorController);
burocketteam 1:6fddb8411725 167 //Thread xbeeTest(xbeeTestThread);
burocketteam 1:6fddb8411725 168 //xbee.baud(115200);
burocketteam 1:6fddb8411725 169 Thread blinkTest(blinkThread);
burocketteam 1:6fddb8411725 170 //Thread xbeeTest(xbeeTestThread);
burocketteam 1:6fddb8411725 171
burocketteam 1:6fddb8411725 172 // xbee.printf("test");
burocketteam 1:6fddb8411725 173
burocketteam 1:6fddb8411725 174 Thread::wait(osWaitForever);
burocketteam 1:6fddb8411725 175 pc.printf("exiting\n");
burocketteam 1:6fddb8411725 176 }