Rev 41 | Rev 110 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 41 | Rev 49 | ||
---|---|---|---|
Line 53... | Line 53... | ||
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
53 | // + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
54 | // + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
55 | // + POSSIBILITY OF SUCH DAMAGE. |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
56 | // ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
57 | #include "91x_lib.h" |
57 | #include "91x_lib.h" |
- | 58 | #include "uart0.h" |
|
58 | #include "uart1.h" |
59 | #include "uart1.h" |
59 | #include "ubx.h" |
60 | #include "ubx.h" |
60 | #include <stdio.h> |
61 | #include <stdio.h> |
- | 62 | #include <stdarg.h> |
|
Line 61... | Line 63... | ||
61 | 63 | ||
62 | //------------------------------------------------------------------------------------ |
64 | //------------------------------------------------------------------------------------ |
Line 63... | Line 65... | ||
63 | // global variables |
65 | // global variables |
64 | - | ||
65 | - | ||
66 | // UART0 MUXER |
- | |
67 | typedef enum |
- | |
68 | { |
- | |
69 | UART0_UNDEF, |
- | |
Line 70... | Line 66... | ||
70 | UART0_MK3MAG, |
66 | |
71 | UART0_MKGPS |
67 | |
72 | } UART0_MuxerState_t; |
68 | // UART0 MUXER |
Line -... | Line 69... | ||
- | 69 | ||
- | 70 | UART0_MuxerState_t UART0_Muxer = UART0_UNDEF; |
|
- | 71 | u16 Uart0Baudrate = BAUD_RATE; |
|
- | 72 | u16 Uart0MK3MagBaudrate = BAUD_RATE; |
|
73 | 73 | ||
74 | UART0_MuxerState_t UART0_Muxer = UART0_UNDEF; |
74 | volatile u8 txd_buffer0[TXD_BUFFER_LEN]; |
Line 75... | Line 75... | ||
75 | u16 Uart0Baudrate = BAUD_RATE; |
75 | volatile u8 txd_complete0 = TRUE; |
76 | u16 Uart0MK3MagBaudrate = BAUD_RATE; |
76 | static u16 ptr_txd_buffer0 = 0; |
Line 220... | Line 220... | ||
220 | VIC_ITCmd(UART0_ITLine, ENABLE); |
220 | VIC_ITCmd(UART0_ITLine, ENABLE); |
221 | UART0_Connect_to_MKGPS(); |
221 | UART0_Connect_to_MKGPS(); |
222 | SerialPutString("ok"); |
222 | SerialPutString("ok"); |
223 | } |
223 | } |
Line -... | Line 224... | ||
- | 224 | ||
- | 225 | /**************************************************************/ |
|
- | 226 | /* Transmit tx buffer via debug uart */ |
|
- | 227 | /**************************************************************/ |
|
- | 228 | void UART0_Transmit(void) |
|
- | 229 | { |
|
- | 230 | u8 tmp_tx; |
|
- | 231 | // if something has to be send and the txd fifo is not full |
|
- | 232 | if((!txd_complete0) && (UART_GetFlagStatus(UART0, UART_FLAG_TxFIFOFull) == RESET)) |
|
- | 233 | { |
|
- | 234 | tmp_tx = txd_buffer0[ptr_txd_buffer0]; // read byte from txd buffer |
|
- | 235 | // if terminating character or end of txd buffer reached |
|
- | 236 | if((tmp_tx == '\r') || (ptr_txd_buffer0 == TXD_BUFFER_LEN)) |
|
- | 237 | { |
|
- | 238 | ptr_txd_buffer0 = 0; // reset txd buffer pointer |
|
- | 239 | txd_complete0 = TRUE;// set complete flag |
|
- | 240 | } |
|
- | 241 | UART_SendData(UART0, tmp_tx); // put character to txd fifo |
|
- | 242 | // set pointer to next byte |
|
- | 243 | ptr_txd_buffer0++; |
|
- | 244 | } |
|
- | 245 | } |
|
- | 246 | ||
- | 247 | /**************************************************************/ |
|
- | 248 | /* Add CRC and initiate transmission via debug uart */ |
|
- | 249 | /**************************************************************/ |
|
- | 250 | void AddCRC0(u16 datalen) |
|
- | 251 | { |
|
- | 252 | u16 tmpCRC = 0, i; |
|
- | 253 | for(i = 0; i < datalen; i++) |
|
- | 254 | { |
|
- | 255 | tmpCRC += txd_buffer0[i]; |
|
- | 256 | } |
|
- | 257 | tmpCRC %= 4096; |
|
- | 258 | txd_buffer0[i++] = '=' + tmpCRC / 64; |
|
- | 259 | txd_buffer0[i++] = '=' + tmpCRC % 64; |
|
- | 260 | txd_buffer0[i++] = '\r'; |
|
- | 261 | ||
- | 262 | ptr_txd_buffer0 = 0; |
|
- | 263 | txd_complete0 = FALSE; |
|
- | 264 | UART_SendData(UART0, txd_buffer0[ptr_txd_buffer0++]); // send first byte, to be continued in the txd irq |
|
- | 265 | } |
|
- | 266 | ||
- | 267 | ||
- | 268 | ||
- | 269 | /**************************************************************/ |
|
- | 270 | /* Code output data */ |
|
- | 271 | /**************************************************************/ |
|
- | 272 | void SendOutData0(u8 cmd, u8 Address, u8 numofbuffers , ...) //u8 *data, u8 len, .... |
|
- | 273 | { |
|
- | 274 | va_list ap; |
|
- | 275 | ||
- | 276 | u16 pt = 0; |
|
- | 277 | u8 a,b,c; |
|
- | 278 | u8 ptr = 0; |
|
- | 279 | ||
- | 280 | u8* pdata = NULL; |
|
- | 281 | int len = 0; |
|
- | 282 | ||
- | 283 | txd_buffer0[pt++] = '#'; // Start character |
|
- | 284 | txd_buffer0[pt++] = 'a' + Address; // Address (a=0; b=1,...) |
|
- | 285 | txd_buffer0[pt++] = cmd; // Command |
|
- | 286 | ||
- | 287 | va_start(ap, numofbuffers); |
|
- | 288 | if(numofbuffers) |
|
- | 289 | { |
|
- | 290 | pdata = va_arg(ap, u8*); |
|
- | 291 | len = va_arg(ap, int); |
|
- | 292 | ptr = 0; |
|
- | 293 | numofbuffers--; |
|
- | 294 | } |
|
- | 295 | while(len) |
|
- | 296 | { |
|
- | 297 | if(len) |
|
- | 298 | { |
|
- | 299 | a = pdata[ptr++]; |
|
- | 300 | len--; |
|
- | 301 | if((!len) && numofbuffers) // try to jump to next buffer |
|
- | 302 | { |
|
- | 303 | pdata = va_arg(ap, u8*); |
|
- | 304 | len = va_arg(ap, int); |
|
- | 305 | ptr = 0; |
|
- | 306 | numofbuffers--; |
|
- | 307 | } |
|
- | 308 | } |
|
- | 309 | else a = 0; |
|
- | 310 | if(len) |
|
- | 311 | { |
|
- | 312 | b = pdata[ptr++]; |
|
- | 313 | len--; |
|
- | 314 | if((!len) && numofbuffers) // try to jump to next buffer |
|
- | 315 | { |
|
- | 316 | pdata = va_arg(ap, u8*); |
|
- | 317 | len = va_arg(ap, int); |
|
- | 318 | ptr = 0; |
|
- | 319 | numofbuffers--; |
|
- | 320 | } |
|
- | 321 | } |
|
- | 322 | else b = 0; |
|
- | 323 | if(len) |
|
- | 324 | { |
|
- | 325 | c = pdata[ptr++]; |
|
- | 326 | len--; |
|
- | 327 | if((!len) && numofbuffers) // try to jump to next buffer |
|
- | 328 | { |
|
- | 329 | pdata = va_arg(ap, u8*); |
|
- | 330 | len = va_arg(ap, int); |
|
- | 331 | ptr = 0; |
|
- | 332 | numofbuffers--; |
|
- | 333 | } |
|
- | 334 | } |
|
- | 335 | else c = 0; |
|
- | 336 | txd_buffer0[pt++] = '=' + (a >> 2); |
|
- | 337 | txd_buffer0[pt++] = '=' + (((a & 0x03) << 4) | ((b & 0xf0) >> 4)); |
|
- | 338 | txd_buffer0[pt++] = '=' + (((b & 0x0f) << 2) | ((c & 0xc0) >> 6)); |
|
- | 339 | txd_buffer0[pt++] = '=' + ( c & 0x3f); |
|
- | 340 | } |
|
- | 341 | va_end(ap); |
|
- | 342 | AddCRC0(pt); // add checksum after data block and initates the transmission |
|
- | 343 | } |
|
- | 344 | ||
224 | 345 | ||
225 | /********************************************************/ |
346 | /********************************************************/ |
226 | /* UART0 Interrupt Handler */ |
347 | /* UART0 Interrupt Handler */ |
227 | /********************************************************/ |
348 | /********************************************************/ |
228 | void UART0_IRQHandler(void) |
349 | void UART0_IRQHandler(void) |