MCF52233_support.c
上传用户:dongxin
上传日期:2022-06-22
资源大小:370k
文件大小:7k
源码类别:

uCOS

开发平台:

Others

  1. /*
  2.  * File:        mcf52233_support.h
  3.  * Purpose:     Implements UART basic support, Derivative Specific Interrupt handler and need function needed 
  4.  *              for MSL Support (printfcout to terminal), defined in <UART.h>
  5.  *
  6.  * Notes:       
  7.  *              
  8.  */
  9. #include "support_common.h"
  10. #include "mcf52233_support.h"
  11. #include <stdio.h>
  12. /********************************************************************/
  13. /** Interrupt Handling                                             **/
  14. /********************************************************************/
  15. /********************************************************************/
  16. /*
  17.  * Derivative Specific Interrupt Handler
  18.  * This is the exception handler for derivative specific exceptions. 
  19.  *
  20.  * Called by mcf5xxx_exception_handler which is called by asm_exception_handler 
  21.  * Functions provided by processor specific C file.
  22.  *
  23.  */
  24. void
  25. derivative_handle_interrupt (int vector)
  26. {
  27.     if (vector < 64 || vector > 192) 
  28.     {
  29. printf("User Defined Vector #%dn",vector);
  30.     
  31.     }
  32. }
  33. /********************************************************************/
  34. /** UART Sample Code                                               **/
  35. /********************************************************************/
  36. #if UART_SUPPORT==1 
  37. /********************************************************************/
  38. /*
  39.  * Initialize the UART for 8N1 operation, interrupts disabled, and
  40.  * no hardware flow-control
  41.  *
  42.  * Parameters:
  43.  *  uartch      UART channel to initialize
  44.  *  sysclk      UART System Clock (khz, used to calculate baud)
  45.  *  baud        UART baud rate
  46.  *  settings    Initialization parameters
  47.  */
  48. void uart_init(int /*uartch*/, int sysclk, int baud, int /*settings*/) {
  49. /*
  50.  * Initialize all three UARTs for serial communications
  51.  */
  52. register uint16 ubgs;
  53. /*
  54.  * Set Port UA to initialize URXD0/UTXD0
  55.  */
  56.     MCF_GPIO_PUAPAR = 0
  57.         | MCF_GPIO_PUAPAR_URXD0_URXD0
  58.         | MCF_GPIO_PUAPAR_UTXD0_UTXD0;
  59.     MCF_GPIO_PUBPAR = 0
  60.         | MCF_GPIO_PUBPAR_URXD1_URXD1
  61.         | MCF_GPIO_PUBPAR_UTXD1_UTXD1;
  62.     MCF_GPIO_PUCPAR = 0
  63.         | MCF_GPIO_PUCPAR_URXD2_URXD2
  64.         | MCF_GPIO_PUCPAR_UTXD2_UTXD2;
  65. /*
  66.  * Reset Transmitter
  67.  */
  68. MCF_UART0_UCR = MCF_UART_UCR_RESET_TX;
  69. MCF_UART1_UCR = MCF_UART_UCR_RESET_TX;
  70. MCF_UART2_UCR = MCF_UART_UCR_RESET_TX;
  71. /*
  72.  * Reset Receiver
  73.  */
  74. MCF_UART0_UCR = MCF_UART_UCR_RESET_RX;
  75. MCF_UART1_UCR = MCF_UART_UCR_RESET_RX;
  76. MCF_UART2_UCR = MCF_UART_UCR_RESET_RX;
  77. /*
  78.  * Reset Mode Register
  79.  */
  80. MCF_UART0_UCR = MCF_UART_UCR_RESET_MR;
  81. MCF_UART1_UCR = MCF_UART_UCR_RESET_MR;
  82. MCF_UART2_UCR = MCF_UART_UCR_RESET_MR;
  83. /*
  84.  * No parity, 8-bits per character
  85.  */
  86. MCF_UART0_UMR1 = (0
  87. | MCF_UART_UMR_PM_NONE
  88. | MCF_UART_UMR_BC_8 );
  89. MCF_UART1_UMR1 = (0
  90. | MCF_UART_UMR_PM_NONE
  91. | MCF_UART_UMR_BC_8 );
  92. MCF_UART2_UMR1 = (0
  93. | MCF_UART_UMR_PM_NONE
  94. | MCF_UART_UMR_BC_8 );
  95. /*
  96.  * No echo or loopback, 1 stop bit
  97.  */
  98. MCF_UART0_UMR1 = (0
  99. | MCF_UART_UMR_CM_NORMAL
  100. | MCF_UART_UMR_SB_STOP_BITS_1);
  101. MCF_UART1_UMR1 = (0
  102. | MCF_UART_UMR_CM_NORMAL
  103. | MCF_UART_UMR_SB_STOP_BITS_1);
  104. MCF_UART2_UMR1 = (0
  105. | MCF_UART_UMR_CM_NORMAL
  106. | MCF_UART_UMR_SB_STOP_BITS_1);
  107. /*
  108.  * Set Rx and Tx baud by SYSTEM CLOCK
  109.  */
  110. MCF_UART0_UCSR = (0
  111. | MCF_UART_UCSR_RCS_SYS_CLK
  112. | MCF_UART_UCSR_TCS_SYS_CLK);
  113. MCF_UART1_UCSR = (0
  114. | MCF_UART_UCSR_RCS_SYS_CLK
  115. | MCF_UART_UCSR_TCS_SYS_CLK);
  116. MCF_UART2_UCSR = (0
  117. | MCF_UART_UCSR_RCS_SYS_CLK
  118. | MCF_UART_UCSR_TCS_SYS_CLK);
  119. /*
  120.  * Mask all UART interrupts
  121.  */
  122. MCF_UART0_UIMR = 0;
  123. MCF_UART1_UIMR = 0;
  124. MCF_UART2_UIMR = 0;
  125. /*
  126.  * Calculate baud settings
  127.  */
  128. ubgs = (uint16)((sysclk*1000)/(baud * 32));
  129. MCF_UART0_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);
  130. MCF_UART0_UBG2 = (uint8)(ubgs & 0x00FF);
  131. MCF_UART1_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);
  132. MCF_UART1_UBG2 = (uint8)(ubgs & 0x00FF);
  133. MCF_UART2_UBG1 = (uint8)((ubgs & 0xFF00) >> 8);
  134. MCF_UART2_UBG2 = (uint8)(ubgs & 0x00FF);
  135. /*
  136.  * Enable receiver and transmitter
  137.  */
  138. MCF_UART0_UCR = (0
  139. | MCF_UART_UCR_TX_ENABLED
  140. | MCF_UART_UCR_RX_ENABLED);
  141. MCF_UART1_UCR = (0
  142. | MCF_UART_UCR_TX_ENABLED
  143. | MCF_UART_UCR_RX_ENABLED);
  144. MCF_UART2_UCR = (0
  145. | MCF_UART_UCR_TX_ENABLED
  146. | MCF_UART_UCR_RX_ENABLED);
  147. }
  148. /********************************************************************/
  149. /*
  150.  * Wait for a character to be received on the specified UART
  151.  *
  152.  * Return Values:
  153.  *  the received character
  154.  */
  155. unsigned char uart_getchar (int channel)
  156. {
  157.     /* Wait until character has been received */
  158.     while (!(MCF_UART_USR(channel) & MCF_UART_USR_RXRDY))
  159.         ; 
  160.     return MCF_UART_URB(channel);
  161. }
  162. /********************************************************************/
  163. /*
  164.  * Wait for space in the UART Tx FIFO and then send a character
  165.  */ 
  166. void uart_putchar (int channel, char ch)
  167. {
  168.     /* Wait until space is available in the FIFO */
  169.     while (!(MCF_UART_USR(channel) & MCF_UART_USR_TXRDY))
  170.         ;
  171.     /* Send the character */
  172.     MCF_UART_UTB(channel) = (uint8)ch;
  173. }
  174. /********************************************************************/
  175. /*
  176.  * Check to see if a character has been received
  177.  *
  178.  * Return values:
  179.  *  0       No character received
  180.  *  1       Character has been received
  181.  */
  182. int uart_getchar_present (int channel)
  183. {
  184.     return (MCF_UART_USR(channel) & MCF_UART_USR_RXRDY);
  185. }
  186. #endif
  187. /********************************************************************/
  188. /********************************************************************/
  189. /** <UART.h> Neeeded functions                                     **/
  190. /********************************************************************/
  191. /****************************************************************************/
  192. /*
  193.  * Implementation for CodeWarror MSL interface to serial device (UART.h). 
  194.  * Needed for printf, etc...
  195.  * Only InitializeUART, ReadUARTN, and WriteUARTN are implemented.
  196.  *
  197.  */
  198. /****************************************************************************/
  199. /*
  200. ReadUARTN
  201. Read N bytes from the UART.
  202. bytes pointer to result buffer
  203. limit size of buffer and # of bytes to read
  204. */
  205. /****************************************************************************/
  206. UARTError InitializeUART(UARTBaudRate /*baudRate*/)
  207. {
  208. #if UART_SUPPORT==1 
  209.     // UART is initialized in SYSTEM_SysInit to achieve 115200 bauds 
  210. #endif  
  211. return kUARTNoError;
  212. }
  213. /****************************************************************************/
  214. /*
  215. ReadUARTN
  216. Read N bytes from the UART.
  217. bytes pointer to result buffer
  218. limit size of buffer and # of bytes to read
  219. */
  220. /****************************************************************************/
  221. UARTError ReadUARTN(void* bytes, unsigned long limit)
  222. {
  223. int count;
  224. UARTError err= kUARTNoError; 
  225. #if UART_SUPPORT==1 
  226. for (count = 0; count < limit; count++) {
  227.     *( (unsigned char *)bytes + count )=uart_getchar(0);
  228.   }
  229. #endif  
  230. return err;
  231. }
  232. /****************************************************************************/
  233. UARTError WriteUARTN(const void* bytes, unsigned long length)
  234. {
  235. int count;
  236. UARTError err= kUARTNoError; 
  237. #if UART_SUPPORT==1 
  238. for (count = 0; count < length; count++) {
  239. uart_putchar(0, *( ((char *)bytes) + count));
  240. }
  241. #endif
  242. return kUARTNoError;
  243. }