lpc4357第一个实验,串口(中断)

源码如下

  1 #include "chip.h"
  2 #include "board.h"
  3 
  4 #define UARTNum 3 //使用串口3
  5 #define LPC_UART LPC_USART3
  6 #define UARTx_IRQn  USART3_IRQn
  7 #define UARTx_IRQHandler UART3_IRQHandler
  8 #define _GPDMA_CONN_UART_Tx GPDMA_CONN_UART3_Tx
  9 #define _GPDMA_CONN_UART_Rx GPDMA_CONN_UART3_Rx
 10 
 11 static uint8_t uartComplete[] = "Hello  World!
";
 12 static uint8_t uart_interrupt_menu[] =
 13     "UART Interrupt mode demo ! 
Press someting to display 
";
 14 
 15 /* Print Welcome Screen Menu subroutine by Interrupt mode */
 16 void Print_Menu_Interrupt(LPC_USART_T *UARTx)
 17 {
 18     uint32_t tmp, tmp2;
 19     uint8_t *pDat;
 20 
 21     tmp = sizeof(uart_interrupt_menu);
 22     tmp2 = 0;
 23     pDat = (uint8_t *) &uart_interrupt_menu[0];
 24     while (tmp) {
 25         tmp2 = Chip_UART_Interrupt_Transmit(UARTx, pDat, tmp);
 26         pDat += tmp2;
 27         tmp -= tmp2;
 28     }
 29 }
 30 
 31 
 32 void App_Interrupt_Test(void)
 33 {
 34     uint8_t isExit = 0, userInput;
 35     uint32_t len;
 36 
 37 
 38     /* Print out uart interrupt menu */
 39     //Print_Menu_Interrupt(LPC_UART);
 40 
 41     while (!isExit) {
 42         len = 0;
 43         while (len == 0) {
 44             len = Chip_UART_Interrupt_Receive(LPC_UART, &userInput, 1);
 45         }
 46         
 47             Chip_UART_Interrupt_Transmit(LPC_UART, (uint8_t *) &userInput, sizeof(userInput));
 48         
 49         
 50          if (( userInput == 'x') || ( userInput == 'X') ) {
 51             isExit = 1;
 52         }
 53     }
 54     //App_Interrupt_DeInit();
 55 }
 56 
 57 
 58 /*****************************************************************************
 59  *中断服务程序
 60  ****************************************************************************//
 61  
 62 void UARTx_IRQHandler(void)
 63 {
 64     Chip_UART_Interrupt_Handler(LPC_UART);
 65 }
 66 
 67 /**
 68  * @brief    Main UART program body
 69  * @return    Always returns -1
 70  */
 71 int main(void)
 72 {
 73     
 74     //局部变量和一些数据结构的定义
 75     
 76     uint8_t buffer[10];
 77     UART_FIFO_CFG_T UARTFIFOConfigStruct;//FIFO½á¹¹ÌåÉùÃ÷
 78  
 79     //--------时钟初始化-----------------------
 80     Board_Init();//
 81     Board_UART_Init(LPC_UART);
 82 
 83 //设置波特率
 84     Chip_UART_Init(LPC_UART);
 85     Chip_UART_SetBaud(LPC_UART, 115200);
 86     Chip_UART_ConfigData(LPC_UART, UART_DATABIT_8, UART_PARITY_NONE, UART_STOPBIT_1);    /* Default 8-N-1 */
 87 
 88     /* Enable UART Rx interrupt */
 89     Chip_UART_IntConfig(LPC_UART, UART_INTCFG_RBR, ENABLE);
 90     /* Enable UART line status interrupt */
 91     Chip_UART_IntConfig(LPC_UART, UART_INTCFG_RLS, ENABLE);
 92     /* Enable UART Transmit */
 93     Chip_UART_TxCmd(LPC_UART, ENABLE);
 94 
 95 //Fifo 初始化
 96     Chip_UART_FIFOConfigStructInit(LPC_UART, &UARTFIFOConfigStruct);
 97     Chip_UART_FIFOConfig(LPC_UART, &UARTFIFOConfigStruct);
 98 /*
 99 /抢占式优先级和响应优先级 http://www.arm32.com/post/304.html
100     http://blog.csdn.net/blue0432/article/details/7892960
101 
102  preemption = 1, sub-priority = 1 */
103     NVIC_SetPriority(UARTx_IRQn, 1);
104     /* Enable Interrupt for UART0 channel */
105     NVIC_EnableIRQ(UARTx_IRQn);
106     Chip_UART_InitRingBuffer;// ringbuffer !!!!!
107 
108 // 来输出个 字符串 呗Hello world
109  Chip_UART_Send(LPC_UART, uartComplete, sizeof(uartComplete), BLOCKING);
110 
111     
112     Print_Menu_Interrupt(LPC_UART);
113 
114     App_Interrupt_Test();
115     
116     return -1;
117     }
原文地址:https://www.cnblogs.com/kalo1111/p/3172228.html