Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@4:42262a293f60, 2015-04-16 (annotated)
- Committer:
- brakova
- Date:
- Thu Apr 16 19:21:35 2015 +0000
- Revision:
- 4:42262a293f60
- Parent:
- 3:c2b09e28978a
- Child:
- 5:4ef14f22e7b1
SQARE working; SINE wave not working with AD9834, works with AD9838
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| mdigman | 0:4a6c8e7e8ea7 | 1 | #include "mbed.h" |
| mdigman | 0:4a6c8e7e8ea7 | 2 | |
| mdigman | 0:4a6c8e7e8ea7 | 3 | DigitalOut LED_3(LED3); |
| mdigman | 0:4a6c8e7e8ea7 | 4 | |
| mdigman | 0:4a6c8e7e8ea7 | 5 | /****** |
| mdigman | 0:4a6c8e7e8ea7 | 6 | PIN + SPI CONFIG |
| mdigman | 0:4a6c8e7e8ea7 | 7 | ******/ |
| mdigman | 0:4a6c8e7e8ea7 | 8 | |
| mdigman | 0:4a6c8e7e8ea7 | 9 | SPI SPI_AFE_ADC_AND_DDS(p5, p6, p7); //SPI0: MOSI, MISO, SCLK |
| mdigman | 0:4a6c8e7e8ea7 | 10 | DigitalOut ADC_nCS(p8); //ADC_!CS |
| mdigman | 0:4a6c8e7e8ea7 | 11 | |
| mdigman | 0:4a6c8e7e8ea7 | 12 | // These pins control the Phase register and the Frequency register, IF THE DDS IS CONFIGURED TO BE CONTROLLED BY THE PINS, |
| mdigman | 0:4a6c8e7e8ea7 | 13 | //BY DEFAULT, AND HOW I HAVE IT CONFIGURED IS TO NOT USE THESE PINS, REPEAT, it does NOT USE THE PINS, instead uses the SPI bus. |
| mdigman | 0:4a6c8e7e8ea7 | 14 | // By toggling them after config, you can create PSK, FSK, BPSK... |
| mdigman | 3:c2b09e28978a | 15 | DigitalOut CURRENT(p14); //if=1, output of CSM to input selector / switch 2 |
| mdigman | 3:c2b09e28978a | 16 | DigitalOut DDS_nCS(p15); //nCS line used for SPI on |
| mdigman | 0:4a6c8e7e8ea7 | 17 | DigitalOut DDS_PSEL(p16); |
| mdigman | 0:4a6c8e7e8ea7 | 18 | DigitalOut DDS_FSEL(p17); |
| mdigman | 0:4a6c8e7e8ea7 | 19 | |
| mdigman | 3:c2b09e28978a | 20 | DigitalOut SQUARE(p18); //if=1 closes switch to SQUARE path that is not populated |
| mdigman | 0:4a6c8e7e8ea7 | 21 | DigitalOut DDS(p19); //if=1, DDS output connected to TX_PORT |
| mdigman | 0:4a6c8e7e8ea7 | 22 | DigitalOut AFE(p20); //if=1, Electrode routed to Amplification Path |
| mdigman | 0:4a6c8e7e8ea7 | 23 | |
| mdigman | 0:4a6c8e7e8ea7 | 24 | #define SSP_SR_TFE (1<<0) |
| mdigman | 0:4a6c8e7e8ea7 | 25 | #define SSP_SR_TNF (1<<1) |
| mdigman | 0:4a6c8e7e8ea7 | 26 | #define SSP_SR_RFE (1<<2) |
| mdigman | 0:4a6c8e7e8ea7 | 27 | #define SSP_SR_RFF (1<<3) |
| mdigman | 0:4a6c8e7e8ea7 | 28 | #define SSP_SR_BSY (1<<4) |
| mdigman | 0:4a6c8e7e8ea7 | 29 | |
| mdigman | 0:4a6c8e7e8ea7 | 30 | void writeReg(uint16_t val){ |
| mdigman | 0:4a6c8e7e8ea7 | 31 | __disable_irq(); |
| mdigman | 0:4a6c8e7e8ea7 | 32 | |
| mdigman | 0:4a6c8e7e8ea7 | 33 | DDS_nCS = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 34 | //DDS_nCS0; |
| mdigman | 0:4a6c8e7e8ea7 | 35 | |
| mdigman | 0:4a6c8e7e8ea7 | 36 | while ( !(LPC_SSP0->SR & SSP_SR_TNF) ); //while ssp is not writable |
| mdigman | 0:4a6c8e7e8ea7 | 37 | LPC_SSP0->DR = val; //write this out |
| mdigman | 0:4a6c8e7e8ea7 | 38 | while ( (LPC_SSP0->SR & SSP_SR_BSY) ); //wait until transmission is over to pull ncs up |
| mdigman | 0:4a6c8e7e8ea7 | 39 | |
| mdigman | 0:4a6c8e7e8ea7 | 40 | DDS_nCS = 1; |
| mdigman | 0:4a6c8e7e8ea7 | 41 | //DDS_nCS1; |
| mdigman | 0:4a6c8e7e8ea7 | 42 | |
| mdigman | 0:4a6c8e7e8ea7 | 43 | __enable_irq(); |
| mdigman | 0:4a6c8e7e8ea7 | 44 | } |
| mdigman | 0:4a6c8e7e8ea7 | 45 | |
| mdigman | 0:4a6c8e7e8ea7 | 46 | /****************** |
| mdigman | 0:4a6c8e7e8ea7 | 47 | DDS Library ported from https://github.com/arachnidlabs/ad983x/blob/master/ad983x.cpp |
| mdigman | 0:4a6c8e7e8ea7 | 48 | ******************/ |
| mdigman | 0:4a6c8e7e8ea7 | 49 | #define REG_OPBITEN 0x0020 |
| mdigman | 0:4a6c8e7e8ea7 | 50 | #define REG_SIGNPIB 0x0010 |
| mdigman | 0:4a6c8e7e8ea7 | 51 | #define REG_DIV2 0x0008 |
| mdigman | 0:4a6c8e7e8ea7 | 52 | #define REG_MODE 0x0002 |
| mdigman | 0:4a6c8e7e8ea7 | 53 | #define SIGN_OUTPUT_MASK (REG_OPBITEN | REG_SIGNPIB | REG_DIV2 | REG_MODE) |
| mdigman | 0:4a6c8e7e8ea7 | 54 | |
| mdigman | 0:4a6c8e7e8ea7 | 55 | uint16_t m_reg; |
| mdigman | 0:4a6c8e7e8ea7 | 56 | |
| mdigman | 0:4a6c8e7e8ea7 | 57 | enum SignOutput { |
| mdigman | 0:4a6c8e7e8ea7 | 58 | SIGN_OUTPUT_NONE = 0x0000, |
| mdigman | 0:4a6c8e7e8ea7 | 59 | SIGN_OUTPUT_MSB = 0x0028, |
| mdigman | 0:4a6c8e7e8ea7 | 60 | SIGN_OUTPUT_MSB_2 = 0x0020, |
| mdigman | 0:4a6c8e7e8ea7 | 61 | SIGN_OUTPUT_COMPARATOR = 0x0038, |
| mdigman | 0:4a6c8e7e8ea7 | 62 | }; |
| mdigman | 0:4a6c8e7e8ea7 | 63 | |
| mdigman | 0:4a6c8e7e8ea7 | 64 | void setSignOutput(SignOutput out) { |
| mdigman | 0:4a6c8e7e8ea7 | 65 | m_reg = (m_reg & ~SIGN_OUTPUT_MASK) | out; |
| mdigman | 0:4a6c8e7e8ea7 | 66 | writeReg(m_reg); |
| mdigman | 0:4a6c8e7e8ea7 | 67 | } |
| mdigman | 0:4a6c8e7e8ea7 | 68 | |
| mdigman | 0:4a6c8e7e8ea7 | 69 | enum OutputMode { |
| mdigman | 0:4a6c8e7e8ea7 | 70 | OUTPUT_MODE_SINE = 0x0000, |
| mdigman | 0:4a6c8e7e8ea7 | 71 | OUTPUT_MODE_TRIANGLE = 0x0002, |
| mdigman | 0:4a6c8e7e8ea7 | 72 | }; |
| mdigman | 0:4a6c8e7e8ea7 | 73 | |
| mdigman | 0:4a6c8e7e8ea7 | 74 | void setOutputMode(OutputMode out) { |
| mdigman | 0:4a6c8e7e8ea7 | 75 | if(out == OUTPUT_MODE_TRIANGLE) { |
| mdigman | 0:4a6c8e7e8ea7 | 76 | m_reg = (m_reg & ~SIGN_OUTPUT_MASK) | out; |
| mdigman | 0:4a6c8e7e8ea7 | 77 | } else { |
| mdigman | 0:4a6c8e7e8ea7 | 78 | m_reg &= ~REG_MODE; |
| mdigman | 0:4a6c8e7e8ea7 | 79 | } |
| mdigman | 0:4a6c8e7e8ea7 | 80 | writeReg(m_reg); |
| mdigman | 0:4a6c8e7e8ea7 | 81 | } |
| mdigman | 0:4a6c8e7e8ea7 | 82 | |
| mdigman | 0:4a6c8e7e8ea7 | 83 | #define REG_FREQ1 0x8000 |
| mdigman | 0:4a6c8e7e8ea7 | 84 | #define REG_FREQ0 0x4000 |
| mdigman | 0:4a6c8e7e8ea7 | 85 | void setFrequencyWord(bool reg, uint32_t frequency) { |
| brakova | 2:eb558d650b17 | 86 | writeReg(0x2000); // sets the PIN/SW D9 pin to high >> FSELECT pin can be used to use either FREQ0 or FREQ1 |
| mdigman | 0:4a6c8e7e8ea7 | 87 | writeReg((reg?REG_FREQ1:REG_FREQ0) | (frequency & 0x3FFF)); |
| mdigman | 0:4a6c8e7e8ea7 | 88 | writeReg((reg?REG_FREQ1:REG_FREQ0) | ((frequency >> 14) & 0x3FFF)); |
| mdigman | 0:4a6c8e7e8ea7 | 89 | } |
| mdigman | 0:4a6c8e7e8ea7 | 90 | |
| mdigman | 0:4a6c8e7e8ea7 | 91 | #define REG_PHASE0 0xC000 |
| mdigman | 0:4a6c8e7e8ea7 | 92 | #define REG_PHASE1 0xE000 |
| mdigman | 0:4a6c8e7e8ea7 | 93 | void setPhaseWord(bool reg, uint32_t phase) { |
| mdigman | 0:4a6c8e7e8ea7 | 94 | writeReg((reg?REG_PHASE1:REG_PHASE0) | (phase & 0x0FFF)); |
| mdigman | 0:4a6c8e7e8ea7 | 95 | } |
| mdigman | 0:4a6c8e7e8ea7 | 96 | |
| mdigman | 0:4a6c8e7e8ea7 | 97 | #define REG_FSEL 0x0800 |
| mdigman | 0:4a6c8e7e8ea7 | 98 | void selectFrequency(bool reg) { |
| mdigman | 0:4a6c8e7e8ea7 | 99 | if(reg) { |
| mdigman | 0:4a6c8e7e8ea7 | 100 | m_reg |= REG_FSEL; |
| mdigman | 0:4a6c8e7e8ea7 | 101 | } else { |
| mdigman | 0:4a6c8e7e8ea7 | 102 | m_reg &= ~REG_FSEL; |
| mdigman | 0:4a6c8e7e8ea7 | 103 | } |
| mdigman | 0:4a6c8e7e8ea7 | 104 | writeReg(m_reg); |
| mdigman | 0:4a6c8e7e8ea7 | 105 | } |
| mdigman | 0:4a6c8e7e8ea7 | 106 | |
| mdigman | 0:4a6c8e7e8ea7 | 107 | #define REG_PSEL 0x0400 |
| mdigman | 0:4a6c8e7e8ea7 | 108 | void selectPhase(bool reg) { |
| mdigman | 0:4a6c8e7e8ea7 | 109 | if(reg) { |
| mdigman | 0:4a6c8e7e8ea7 | 110 | m_reg |= REG_PSEL; |
| mdigman | 0:4a6c8e7e8ea7 | 111 | } else { |
| mdigman | 0:4a6c8e7e8ea7 | 112 | m_reg &= ~REG_PSEL; |
| mdigman | 0:4a6c8e7e8ea7 | 113 | } |
| mdigman | 0:4a6c8e7e8ea7 | 114 | writeReg(m_reg); |
| mdigman | 0:4a6c8e7e8ea7 | 115 | } |
| mdigman | 0:4a6c8e7e8ea7 | 116 | |
| mdigman | 0:4a6c8e7e8ea7 | 117 | #define REG_RESET 0x0100 |
| mdigman | 0:4a6c8e7e8ea7 | 118 | void reset(bool in_reset) { |
| mdigman | 0:4a6c8e7e8ea7 | 119 | if(in_reset) { |
| brakova | 4:42262a293f60 | 120 | m_reg |= REG_RESET; // the reset pin goes up |
| mdigman | 0:4a6c8e7e8ea7 | 121 | } else { |
| brakova | 4:42262a293f60 | 122 | m_reg &= ~REG_RESET; // the reset pin goes down |
| mdigman | 0:4a6c8e7e8ea7 | 123 | } |
| mdigman | 0:4a6c8e7e8ea7 | 124 | writeReg(m_reg); //writes 16 bits over SPI |
| mdigman | 0:4a6c8e7e8ea7 | 125 | } |
| mdigman | 0:4a6c8e7e8ea7 | 126 | |
| mdigman | 0:4a6c8e7e8ea7 | 127 | void begin(){ |
| mdigman | 0:4a6c8e7e8ea7 | 128 | reset(true); |
| mdigman | 0:4a6c8e7e8ea7 | 129 | writeReg(m_reg); |
| mdigman | 0:4a6c8e7e8ea7 | 130 | // Initialize frequency and phase registers to 0 |
| mdigman | 0:4a6c8e7e8ea7 | 131 | setFrequencyWord(0, 0); |
| mdigman | 0:4a6c8e7e8ea7 | 132 | setFrequencyWord(1, 0); |
| mdigman | 0:4a6c8e7e8ea7 | 133 | setPhaseWord(0, 0); |
| mdigman | 0:4a6c8e7e8ea7 | 134 | setPhaseWord(1, 0); |
| mdigman | 0:4a6c8e7e8ea7 | 135 | reset(false); |
| mdigman | 0:4a6c8e7e8ea7 | 136 | } |
| mdigman | 0:4a6c8e7e8ea7 | 137 | |
| brakova | 2:eb558d650b17 | 138 | uint8_t Crc8(uint8_t *vptr, int len) |
| brakova | 2:eb558d650b17 | 139 | { |
| brakova | 2:eb558d650b17 | 140 | uint8_t *data = vptr; |
| brakova | 2:eb558d650b17 | 141 | unsigned crc = 0; |
| brakova | 2:eb558d650b17 | 142 | int i, j; |
| brakova | 2:eb558d650b17 | 143 | for (j = len; j; j--, data++) { |
| brakova | 2:eb558d650b17 | 144 | crc ^= (*data << 8); |
| brakova | 2:eb558d650b17 | 145 | for(i = 8; i; i--) { |
| brakova | 2:eb558d650b17 | 146 | if (crc & 0x8000) |
| brakova | 2:eb558d650b17 | 147 | crc ^= (0x1070 << 3); |
| brakova | 2:eb558d650b17 | 148 | crc <<= 1; |
| brakova | 2:eb558d650b17 | 149 | } |
| brakova | 2:eb558d650b17 | 150 | } |
| brakova | 2:eb558d650b17 | 151 | return (uint8_t)(crc >> 8); |
| brakova | 2:eb558d650b17 | 152 | } |
| brakova | 2:eb558d650b17 | 153 | |
| mdigman | 0:4a6c8e7e8ea7 | 154 | /******************* |
| mdigman | 0:4a6c8e7e8ea7 | 155 | MAIN |
| mdigman | 0:4a6c8e7e8ea7 | 156 | *******************/ |
| mdigman | 0:4a6c8e7e8ea7 | 157 | int main() { |
| mdigman | 0:4a6c8e7e8ea7 | 158 | //init pins |
| mdigman | 0:4a6c8e7e8ea7 | 159 | DDS_PSEL = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 160 | DDS_FSEL = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 161 | SQUARE = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 162 | DDS = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 163 | AFE = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 164 | LED_3 = 1; |
| mdigman | 0:4a6c8e7e8ea7 | 165 | |
| mdigman | 0:4a6c8e7e8ea7 | 166 | //nCS lines |
| mdigman | 0:4a6c8e7e8ea7 | 167 | DDS_nCS = 1; |
| mdigman | 0:4a6c8e7e8ea7 | 168 | ADC_nCS = 1; |
| brakova | 4:42262a293f60 | 169 | CURRENT = 0; |
| mdigman | 0:4a6c8e7e8ea7 | 170 | |
| mdigman | 0:4a6c8e7e8ea7 | 171 | //init spi |
| mdigman | 0:4a6c8e7e8ea7 | 172 | SPI_AFE_ADC_AND_DDS.format(16,2); |
| mdigman | 0:4a6c8e7e8ea7 | 173 | SPI_AFE_ADC_AND_DDS.frequency(33000000); |
| mdigman | 0:4a6c8e7e8ea7 | 174 | |
| mdigman | 0:4a6c8e7e8ea7 | 175 | //make sure SPI is setup to mode 2, MSB first |
| mdigman | 0:4a6c8e7e8ea7 | 176 | //init DDS |
| mdigman | 0:4a6c8e7e8ea7 | 177 | begin(); |
| mdigman | 0:4a6c8e7e8ea7 | 178 | //output calculation |
| mdigman | 3:c2b09e28978a | 179 | //fOut = fMCLK / 2^28 * FREQREG = 50e6 / 2^28 * FREQREG |
| mdigman | 3:c2b09e28978a | 180 | //FREQREG = fOut * 2^28 / 50e6 = fOut * 5.36870912 |
| mdigman | 3:c2b09e28978a | 181 | //1 MHz: 5368709, 2 MHz: 10737418, 3 MHz: 16106127, 4 MHz: 21474836, 8 MHz: 42949673 MHz, 20 MHz: 107374182, Max: 0x3FFF |
| brakova | 4:42262a293f60 | 182 | setFrequencyWord(0, 5368709); // 500K |
| mdigman | 3:c2b09e28978a | 183 | setFrequencyWord(1, 0x3FFF); |
| mdigman | 3:c2b09e28978a | 184 | selectFrequency(0); |
| brakova | 4:42262a293f60 | 185 | |
| brakova | 4:42262a293f60 | 186 | setSignOutput(SIGN_OUTPUT_NONE); //set SIGN BIT OUT to Z |
| brakova | 4:42262a293f60 | 187 | setOutputMode(OUTPUT_MODE_SINE); |
| brakova | 4:42262a293f60 | 188 | DDS = 1; |
| mdigman | 0:4a6c8e7e8ea7 | 189 | |
| brakova | 4:42262a293f60 | 190 | /* // FOR A SQUARE WAVE: |
| mdigman | 0:4a6c8e7e8ea7 | 191 | setSignOutput(SIGN_OUTPUT_MSB); |
| mdigman | 0:4a6c8e7e8ea7 | 192 | //open the DDS output |
| mdigman | 0:4a6c8e7e8ea7 | 193 | SQUARE = 1; |
| brakova | 4:42262a293f60 | 194 | */ |
| brakova | 4:42262a293f60 | 195 | // SQUARE = 0; |
| brakova | 4:42262a293f60 | 196 | // DDS = 1; |
| brakova | 4:42262a293f60 | 197 | /* |
| brakova | 4:42262a293f60 | 198 | int i; |
| brakova | 4:42262a293f60 | 199 | float frequencies[] = {100,50,33,25,20,17,14,12,11,10,9,8}; |
| brakova | 4:42262a293f60 | 200 | |
| brakova | 4:42262a293f60 | 201 | while(1) { |
| brakova | 4:42262a293f60 | 202 | for( i=0; i< sizeof(frequencies)/sizeof(float); i++) { |
| brakova | 4:42262a293f60 | 203 | setFrequencyWord(0, (int)((float)(2<<27) / frequencies[i])); |
| brakova | 4:42262a293f60 | 204 | selectFrequency(0); |
| brakova | 4:42262a293f60 | 205 | wait_ms(2000); |
| brakova | 4:42262a293f60 | 206 | LED_3 = !LED_3; |
| brakova | 4:42262a293f60 | 207 | } |
| brakova | 4:42262a293f60 | 208 | wait_ms(3000); |
| brakova | 4:42262a293f60 | 209 | } |
| brakova | 2:eb558d650b17 | 210 | |
| brakova | 2:eb558d650b17 | 211 | #define bit_up_time 8 //8 for no logic |
| brakova | 2:eb558d650b17 | 212 | #define bit_guard_time 8 //8 for no logic |
| brakova | 2:eb558d650b17 | 213 | #define data_reset_time 16 //16 for no logic |
| brakova | 2:eb558d650b17 | 214 | |
| brakova | 2:eb558d650b17 | 215 | //specify the data |
| brakova | 2:eb558d650b17 | 216 | #define data_len 9 //in bytes, remember to leave the last byte as 0 for the crc |
| brakova | 2:eb558d650b17 | 217 | uint8_t data[data_len] = {0xAA, 0xFF, 0xD0, 0x59, 0xE4, 0xCC, 0x1A, 0x2A, 0}; //bt mac format: header, type, data ... data, crc (crc should be 0x89 in this case) |
| brakova | 2:eb558d650b17 | 218 | data[data_len-1] = Crc8(&data[1], data_len-2); //crc includes everything except the header byte |
| brakova | 2:eb558d650b17 | 219 | uint8_t bytecount = 0, bitcount = 0; |
| brakova | 2:eb558d650b17 | 220 | int32_t freq = 0; |
| brakova | 2:eb558d650b17 | 221 | uint8_t freqRegister = 0; |
| brakova | 4:42262a293f60 | 222 | */ |
| brakova | 4:42262a293f60 | 223 | /* |
| brakova | 2:eb558d650b17 | 224 | __disable_irq(); |
| brakova | 2:eb558d650b17 | 225 | while(1) { |
| brakova | 2:eb558d650b17 | 226 | for (bytecount=0; bytecount<data_len; bytecount++){ |
| brakova | 2:eb558d650b17 | 227 | for(bitcount=0; bitcount<8; bitcount++){ |
| brakova | 2:eb558d650b17 | 228 | if ( (( data[bytecount]>>bitcount ) & 0x01) == 0){ //send binary 0 |
| brakova | 2:eb558d650b17 | 229 | |
| brakova | 2:eb558d650b17 | 230 | selectFrequency(0); |
| brakova | 2:eb558d650b17 | 231 | SQUARE = 1; |
| brakova | 2:eb558d650b17 | 232 | |
| brakova | 2:eb558d650b17 | 233 | wait_ms(bit_up_time); |
| brakova | 2:eb558d650b17 | 234 | |
| brakova | 2:eb558d650b17 | 235 | SQUARE = 0; |
| brakova | 2:eb558d650b17 | 236 | //set_DDS(DDS_MCLK_SLEEP); //THIS CAUSES PROBLEMS - ENVELOPE ON DATA? |
| brakova | 2:eb558d650b17 | 237 | wait_ms(bit_guard_time); |
| brakova | 2:eb558d650b17 | 238 | |
| brakova | 2:eb558d650b17 | 239 | } else { //send binary 1 |
| brakova | 2:eb558d650b17 | 240 | selectFrequency(1); |
| brakova | 2:eb558d650b17 | 241 | SQUARE = 1; |
| brakova | 2:eb558d650b17 | 242 | |
| brakova | 2:eb558d650b17 | 243 | wait_ms(bit_up_time); |
| brakova | 2:eb558d650b17 | 244 | |
| brakova | 2:eb558d650b17 | 245 | SQUARE = 0; |
| brakova | 2:eb558d650b17 | 246 | //set_DDS(DDS_MCLK_SLEEP); //THIS CAUSES PROBLEMS - ENVELOPE ON DATA? |
| brakova | 2:eb558d650b17 | 247 | wait_ms(bit_guard_time); |
| brakova | 2:eb558d650b17 | 248 | } |
| brakova | 2:eb558d650b17 | 249 | }//end bitcount |
| brakova | 2:eb558d650b17 | 250 | }//end bytecount |
| brakova | 2:eb558d650b17 | 251 | |
| brakova | 2:eb558d650b17 | 252 | wait_ms(data_reset_time); //all the data has been sent, delay for some time to reset |
| brakova | 2:eb558d650b17 | 253 | |
| brakova | 2:eb558d650b17 | 254 | }//end while |
| brakova | 2:eb558d650b17 | 255 | __enable_irq(); |
| brakova | 4:42262a293f60 | 256 | */ |
| mdigman | 0:4a6c8e7e8ea7 | 257 | } |