📄 uart_exp.c
字号:
#include <cdefBF561.h>
#include <ccblkfn.h>
#include <sys/exception.h>
#include "Exp_Config.h"
#include "sys_func.h"
/*
* UART Configuartion
*/
#define UART_BAUD_RATE (115200)
/****************************************************************************************
* 函数名 : Init_ UART
* 函数功能 :配置BF561的UART寄存器
* 说明 :UART各寄存器的介绍请参考ADI公司的
* 《ADSP-BF561 Blackfin Processor Hardware Reference》
****************************************************************************************/
void Init_UART(void)
{
unsigned long SYS_SCLK=GetSCLK();
unsigned short Divisor =SYS_SCLK / (UART_BAUD_RATE << 4);
*pUART_GCTL = 0x0001; //UART Global Control Register
ssync();
*pUART_LCR = 0x0083; //UART Line Control Register, prepare for DLL and DLH setting
ssync();
*pUART_DLL = Divisor & 0x00FF;
*pUART_DLH = (Divisor >> 8) & 0x00FF; //UART Divisor Latch Registers
ssync();
*pUART_LCR = 0x0013; //UART Line Control Register
ssync();
*pUART_MCR = 0x0000; //Modem Control Register
*pUART_IER = 0x0003; //UART Interrupt Enable Register
ssync();
while(*pUART_LSR&0xe){
ssync();
}
}
EX_INTERRUPT_HANDLER(UART_RX_ISR)
{
unsigned short data;
if (*pUART_LSR & 0x0001)
{
data = *pUART_RBR;
*pUART_THR = data;
while ((*pUART_LSR & 0x0020) == 0);
}
}
void Init_UARTRx_Interrupt(void)
{
*pSICB_IAR3 = (*pSICB_IAR3)&0xfff0ffff|(2<<16);
register_handler(ik_ivg9, UART_RX_ISR);
*pSICB_IMASK0|=(1<<28);
}
void UART_Exp(void)
{
Init_UART();
Init_UARTRx_Interrupt();
while (1)
{
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -