⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart0isr.c

📁 最新的LPC214X UART驱动程序
💻 C
字号:
////  $Id: uart0ISR.c 89 2008-10-10 15:25:48Z jcw $//  $Revision: 89 $//  $Author: jcw $//  $Date: 2008-10-10 11:25:48 -0400 (Fri, 10 Oct 2008) $//  $HeadURL: http://tinymicros.com/svn_public/arm/lpc2148_demo/trunk/uart/uart0ISR.c $//////  Standard includes//#include <stdlib.h>////  Scheduler includes//#include "FreeRTOS.h"#include "queue.h"#include "task.h"////  Demo application includes//#include "uart0.h"#include "uart0ISR.h"////  Constants to determine the ISR source//#define serSOURCE_THRE					  ((unsigned portCHAR) 0x02)#define serSOURCE_RX_TIMEOUT			((unsigned portCHAR) 0x0c)#define serSOURCE_ERROR					  ((unsigned portCHAR) 0x06)#define serSOURCE_RX					    ((unsigned portCHAR) 0x04)#define serINTERRUPT_SOURCE_MASK	((unsigned portCHAR) 0x0f)////  Queues used to hold received characters, and characters waiting to be transmitted//static xQueueHandle xRX0Queue; static xQueueHandle xTX0Queue; static volatile portLONG lTHREEmpty0;//////void uart0ISRCreateQueues (unsigned portBASE_TYPE uxQueueLength, xQueueHandle *pxRX0Queue, xQueueHandle *pxTX0Queue, portLONG volatile **pplTHREEmptyFlag){  //  //  Create the queues used to hold Rx and Tx characters  //  *pxRX0Queue = xRX0Queue = xQueueCreate (uxQueueLength, (unsigned portBASE_TYPE) sizeof (signed portCHAR));  *pxTX0Queue = xTX0Queue = xQueueCreate (uxQueueLength + 1, (unsigned portBASE_TYPE) sizeof (signed portCHAR));  //  //  Initialise the THRE empty flag - and pass back a reference  //  lTHREEmpty0 = (portLONG) pdTRUE;  *pplTHREEmptyFlag = &lTHREEmpty0;}//////static void uart0ISR_Handler (void){  signed portCHAR cChar;  portBASE_TYPE higherPriorityTaskWoken = pdFALSE;  switch (UART0_IIR & serINTERRUPT_SOURCE_MASK)  {    //    //  Not handling this, but clear the interrupt    //    case serSOURCE_ERROR :	      {        cChar = UART0_LSR;      }      break;    //    //  The THRE is empty.  If there is another character in the Tx queue, send it now,    //  otherwise, no more characters, so indicate THRE is available    //    case serSOURCE_THRE	:	      {        if (xQueueReceiveFromISR (xTX0Queue, &cChar, &higherPriorityTaskWoken) == pdPASS)          UART0_THR = cChar;        else          lTHREEmpty0 = pdTRUE;      }      break;    //    //  A character was received.  Place it in the queue of received characters    //    case serSOURCE_RX_TIMEOUT :    case serSOURCE_RX	:	      {        cChar = UART0_RBR;        xQueueSendFromISR (xRX0Queue, &cChar, &higherPriorityTaskWoken);      }      break;    default	:      break;  }  VIC_VectAddr = (unsigned portLONG) 0;  if (higherPriorityTaskWoken)    portYIELD_FROM_ISR ();}void uart0ISR (void) __attribute__ ((naked));void uart0ISR (void){  portSAVE_CONTEXT ();  uart0ISR_Handler ();  portRESTORE_CONTEXT ();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -