uart.c
上传用户:fy98168
上传日期:2015-06-26
资源大小:13771k
文件大小:5k
源码类别:

DVD

开发平台:

C/C++

  1. #ifdef REPORT_TO_CONSOLE
  2.    #include <stdio.h>
  3. #endif
  4. #include <string.h>
  5. #include "stdevice.h"
  6. #include "stsys.h"
  7. #include "stpio.h"
  8. #include "stuart.h"
  9. #include "stcommon.h"
  10. #include "gendef.h"
  11. #include "section.h"
  12. #include "uart.h"
  13. #include "pio.h"
  14. #define UART_END_OF_LIST 0xff
  15. static U8 InitList[] = { KB_UART_DATA_DEV, KB_UART_SC0_DEV, UART_END_OF_LIST };
  16. ST_DeviceName_t UART_DeviceName[] = {"UART0","UART1"};
  17. STUART_Handle_t UART_Handle[KB_UART_DEVICES];
  18. ST_ClockInfo_t ST_ClockInfo;
  19. extern ST_DeviceName_t PIO_DeviceName[];
  20. static ST_ErrorCode_t uart_init(int Instance);
  21. static ST_ErrorCode_t uart_init(int Instance)
  22. {
  23.     ST_ErrorCode_t      ST_ErrorCode = ST_NO_ERROR;
  24.     STUART_InitParams_t STUART_InitParams;
  25.     STUART_Params_t     STUART_Params;
  26.     /* Common Init Parameters */
  27. (void) ST_GetClockInfo(&ST_ClockInfo);
  28.     STUART_InitParams.DriverPartition = SystemPartition;
  29.     STUART_InitParams.ClockFrequency  = ST_ClockInfo.CommsBlock;
  30.     STUART_InitParams.SwFIFOEnable    = TRUE;
  31.     STUART_InitParams.FIFOLength      = 256;
  32.     STUART_InitParams.RXD.PortName[0] = '';
  33.     STUART_InitParams.TXD.PortName[0] = '';
  34.     STUART_InitParams.RTS.PortName[0] = '';
  35.     STUART_InitParams.CTS.PortName[0] = '';
  36.     #ifdef REPORT_TO_CONSOLE
  37.        Print("STUART_Setup(%s/", UART_DeviceName[Instance] );
  38.     #endif
  39.     switch(Instance)
  40.     {
  41.         case KB_UART_DATA_DEV:
  42.             #ifdef REPORT_TO_CONSOLE
  43.                 Print("KB_UART_DATA_DEV)=");
  44.             #endif
  45.             /* set default values */
  46.             STUART_Params.RxMode.BaudRate       = 115200;
  47.             STUART_Params.RxMode.DataBits       = STUART_8BITS_NO_PARITY;
  48.             STUART_Params.RxMode.StopBits       = STUART_STOP_1_0;
  49.             STUART_Params.RxMode.FlowControl    = STUART_NO_FLOW_CONTROL;
  50.             STUART_Params.RxMode.TermString     = NULL;
  51.             STUART_Params.RxMode.TimeOut        = 1;        /* As short as possible */
  52.             STUART_Params.RxMode.NotifyFunction = NULL;     /* No callback */
  53.             STUART_Params.TxMode.BaudRate       = 115200;
  54.             STUART_Params.TxMode.DataBits       = STUART_8BITS_NO_PARITY;
  55.             STUART_Params.TxMode.StopBits       = STUART_STOP_1_0;
  56.             STUART_Params.TxMode.FlowControl    = STUART_NO_FLOW_CONTROL;
  57.             STUART_Params.TxMode.TermString     = NULL;
  58.             STUART_Params.TxMode.TimeOut        = 0;        /* No time-out */
  59.             STUART_Params.TxMode.NotifyFunction = NULL;     /* No callback */
  60.             STUART_Params.SmartCardModeEnabled  = FALSE;
  61.             STUART_Params.GuardTime             = 0;
  62.             STUART_Params.NACKSignalDisabled    = FALSE;
  63.             STUART_Params.HWFifoDisabled        = FALSE;
  64.             /* Initialize DATA Uart */
  65.             STUART_InitParams.UARTType        = KB_UART_ASC_DEVICE_TYPE;
  66.             STUART_InitParams.DefaultParams   = &STUART_Params;
  67.             STUART_InitParams.BaseAddress     = (U32 *)KB_UART_DATA_BASE_ADDRESS;
  68.             STUART_InitParams.InterruptNumber = KB_UART_DATA_INTERRUPT;
  69.             STUART_InitParams.InterruptLevel  = KB_UART_DATA_INTERRUPT_LEVEL;
  70.             STUART_InitParams.RXD.BitMask = KB_UART_DATA_RXD_BIT;
  71.             STUART_InitParams.TXD.BitMask = KB_UART_DATA_TXD_BIT;
  72.             strcpy(STUART_InitParams.RXD.PortName, PIO_DeviceName[KB_UART_DATA_RXD_DEV]);
  73.             strcpy(STUART_InitParams.TXD.PortName, PIO_DeviceName[KB_UART_DATA_TXD_DEV]);
  74.             STUART_InitParams.RTS.BitMask = 0;
  75.             STUART_InitParams.CTS.BitMask = 0;
  76.             strcpy(STUART_InitParams.RTS.PortName, "");
  77.             strcpy(STUART_InitParams.CTS.PortName, "");
  78.         break;
  79.         case KB_UART_SC0_DEV:     /* Initialize SMARTCARD0 Uart*/
  80.             #ifdef REPORT_TO_CONSOLE
  81.                Print("KB_UART_SC0_DEV)=");
  82.             #endif
  83.             STUART_InitParams.UARTType        = STUART_ISO7816;
  84.             STUART_InitParams.DefaultParams   = NULL;
  85.             STUART_InitParams.BaseAddress     = (U32 *)KB_UART_SC0_BASE_ADDRESS;
  86.             STUART_InitParams.InterruptNumber = KB_UART_SC0_INTERRUPT;
  87.             STUART_InitParams.InterruptLevel  = KB_UART_SC0_INTERRUPT_LEVEL;
  88. /* Smart card IO is only one pio, so TX and RX is same */
  89.             STUART_InitParams.RXD.BitMask = KB_UART_SC0_TXD_BIT;
  90.             STUART_InitParams.TXD.BitMask = KB_UART_SC0_TXD_BIT;
  91.             strcpy(STUART_InitParams.RXD.PortName, PIO_DeviceName[KB_UART_SC0_TXD_DEV]);
  92.             strcpy(STUART_InitParams.TXD.PortName, PIO_DeviceName[KB_UART_SC0_TXD_DEV]);
  93. STUART_InitParams.RTS.BitMask = 0;
  94. STUART_InitParams.RTS.PortName[0] = 0;
  95.             STUART_InitParams.CTS.BitMask = 0;
  96.             STUART_InitParams.CTS.PortName[0] = 0;
  97.          break;
  98.         default:
  99.         break;
  100.     }
  101.     ST_ErrorCode = STUART_Init(UART_DeviceName[Instance], &STUART_InitParams);
  102.     #ifdef REPORT_TO_CONSOLE
  103.        if (ST_ErrorCode != ST_NO_ERROR)
  104.            Print("STUART_Init Errorn");
  105.        else
  106.            Print("%sn", STUART_GetRevision() );
  107.     #endif
  108.     return (ST_ErrorCode);
  109. }
  110. ST_ErrorCode_t KB_UartSetup(void)
  111. {
  112.     ST_ErrorCode_t ST_ErrorCode = ST_NO_ERROR;
  113.     U8 Index;
  114.     for ( Index = 0; InitList[Index] != UART_END_OF_LIST; Index++ )
  115.     {
  116.         ST_ErrorCode |= uart_init(InitList[Index]);
  117.     }
  118.     return ( ST_ErrorCode );
  119. }
  120. /* EOF */