Subversion Repositories NaviCtrl

Rev

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)