不知道为什么,这个程序进不了中断,这个程序在TI提供的开发套件里有的,在那个工程了可以用,但是我拷贝出来,在自己建个工程,中断无法响应
程序贴出来了,就在下面,感觉程序应该没问题,基本上抄TI的
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/gpio.h"
#include "driverlib/interrupt.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "drivers/rit128x96x4.h"
void UARTIntHandler(void)
{
unsigned long ulStatus;
ulStatus = UARTIntStatus(UART0_BASE, true); //获取当前的中断状态。bMasked:如果需要原始的中断状态,
//则 bMasked 为 False;如果需要屏蔽的中断状态,bMasked 就为 True
UARTIntClear(UART0_BASE, ulStatus);// 清除 UART 中断源,这必须在中断处理程序中处理,以防在退出时再次对其进行调用。
RIT128x96x4StringDraw("a1", 12, 56, 15);
while(UARTCharsAvail(UART0_BASE)) //指示接收 FIFO 中是否有可用的数据
{
UARTCharPutNonBlocking(UART0_BASE, UARTCharGetNonBlocking(UART0_BASE)); //将字符 ucData 写入指定端口的发送 FIFO
}
}
void UARTSend(const unsigned char *pucBuffer, unsigned long ulCount)
{
while(ulCount--)
{
UARTCharPutNonBlocking(UART0_BASE, *pucBuffer++); // *pucBuffer++=*(pucBuffer++)
// 将字符 ucData 写入指定端口的发送 FIFO
}
}
int main(void)
{
SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN |
SYSCTL_XTAL_8MHZ); //这个函数配置器件的时钟
RIT128x96x4Init(1000000); // 这个函数初始化到 OLED 显示屏的 SSI 接口
RIT128x96x4StringDraw("UART Echo", 36, 0, 15);
RIT128x96x4StringDraw("Port: Uart 0", 12, 16, 15);
RIT128x96x4StringDraw("Baud: 115,200 bps", 12, 24, 15);
RIT128x96x4StringDraw("Data: 8 Bit", 12, 32, 15);
RIT128x96x4StringDraw("Parity: None", 12, 40, 15);
RIT128x96x4StringDraw("Stop: 1 Bit", 12, 48, 15);
SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); //此函数使能外设。上电时全部的外设都被禁止;
//为了使外设能工作或响应寄存器的读写操作,它们必须被使能。
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
IntMasterEnable(); //允许处理器响应中断
GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); //配置管脚供UART外设使用。
UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 9600,(UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE
|UART_CONFIG_PAR_NONE)); //此函数将配置 UART 在指定的数据格式下工作
IntEnable(INT_UART0); //指定的中断在中断控制器中被使能。其它的中断使能(例如外设级)不受这个函数的影响。
UARTIntEnable(UART0_BASE, UART_INT_RX | UART_INT_RT); //UART_INT_RT:接收超时中断;UART_INT_RX:接收中断。
//使能指示的 UART 中断源。只有使能的中断源才能反映为处理器中断;禁止的中断不对处理器产生任何影响。
UARTSend((unsigned char *)"Enter text: ", 12); //通过 UART 端口发送数据。
while(1)
{
}
}
此帖出自
小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
哈哈,我跟楼主是同道中人,第一次用M3的中断的时候,老觉得怪怪的,51还有个中断号啥的表示中断函数,M3就那么智能,跟普通函数那样写就可以用了?后来才知道原来是Startup.s里面定义了中断向量、中断函数那些。例:
;******************************************************************************
;
; External declaration for the interrupt handler used by the application.
;
;******************************************************************************
EXTERN UARTIntHandler
;******************************************************************************
;
; The vector table.
;
;******************************************************************************
EXPORT __Vectors
__Vectors
DCD StackMem + Stack ; Top of Stack
DCD Reset_Handler ; Reset Handler
DCD NmiSR ; NMI Handler
DCD FaultISR ; Hard Fault Handler
DCD IntDefaultHandler ; The MPU fault handler
DCD IntDefaultHandler ; The bus fault handler
DCD IntDefaultHandler ; The usage fault handler
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD 0 ; Reserved
DCD IntDefaultHandler ; SVCall handler
DCD IntDefaultHandler ; Debug monitor handler
DCD 0 ; Reserved
DCD IntDefaultHandler ; The PendSV handler
DCD IntDefaultHandler ; The SysTick handler
DCD IntDefaultHandler ; GPIO Port A
DCD IntDefaultHandler ; GPIO Port B
DCD IntDefaultHandler ; GPIO Port C
DCD IntDefaultHandler ; GPIO Port D
DCD IntDefaultHandler ; GPIO Port E
DCD UARTIntHandler ; UART0 Rx and Tx
DCD IntDefaultHandler ; UART1 Rx and Tx
一周热门 更多>