📄 sci_status.c
字号:
//===========================================================================
// 文件名称: SCI_status.c
//
// 功能描述: DSP28 SCI - 同计算机通信,采用超级中断接受数据
// 间隔2秒DSP向计算机发送字符"2812-UART is fine !"
// SCI配置 : 波特率 9600 ,数据长度 8 Bit , 无极性 , 1位停止位
//
//===========================================================================
#include "DSP281x_Device.h"
// 使用的函数声明
void Gpio_select(void);
void InitSystem(void);
void SCI_Init(void);
void main(void)
{
char message[]={"The F2812-UART is fine !\n\r"};
int index =0; // 字符指针定义
long i;
InitSystem(); // 初始化DSP内核寄存器
Gpio_select(); // 配置GPIO复用功能寄存器
SCI_Init(); // SCI接口初始化
while(1)
{
SciaRegs.SCITXBUF=message[index++];
while ( SciaRegs.SCICTL2.bit.TXEMPTY == 0);
//状态检测模式:
//状态检测,等待发送标识为空:TXEMPTY = 0
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // 看门狗控制
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
if (index > 26)
{
index =0;
for(i=0;i<15000000;i++) // 软件延时,近似2秒.
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // 看门狗控制
SysCtrlRegs.WDKEY = 0xAA; // 看门狗控制
EDIS;
}
}
}
}
void Gpio_select(void)
{
EALLOW;
GpioMuxRegs.GPAMUX.all = 0x0; // 所有 GPIO 端口配置为I/O
GpioMuxRegs.GPBMUX.all = 0x0;
GpioMuxRegs.GPDMUX.all = 0x0;
GpioMuxRegs.GPFMUX.all = 0x0;
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; //配置 SCI-RX
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; //配置 SCI-TX
GpioMuxRegs.GPEMUX.all = 0x0;
GpioMuxRegs.GPGMUX.all = 0x0;
GpioMuxRegs.GPADIR.all = 0x0; // GPIO PORT 配置为输入
GpioMuxRegs.GPBDIR.all = 0x00FF; // GPIO Port B15-B8 配置为输入 , B7-B0 配置为输出
GpioMuxRegs.GPDDIR.all = 0x0; // GPIO PORT 配置为输入
GpioMuxRegs.GPEDIR.all = 0x0; // GPIO PORT 配置为输入
GpioMuxRegs.GPFDIR.all = 0x0; // GPIO PORT 配置为输入
GpioMuxRegs.GPGDIR.all = 0x0; // GPIO PORT 配置为输入
GpioMuxRegs.GPAQUAL.all = 0x0; // 设置所有 GPIO 输入的量化值等于0
GpioMuxRegs.GPBQUAL.all = 0x0;
GpioMuxRegs.GPDQUAL.all = 0x0;
GpioMuxRegs.GPEQUAL.all = 0x0;
EDIS;
}
void InitSystem(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x00AF; // 配置看门狗
// 0x00E8 禁止看门狗,预定标系数Prescaler = 1
// 0x00AF 不禁止看门狗, 预定标系数Prescaler = 64
SysCtrlRegs.SCSR = 0; // 看门狗产生复位
SysCtrlRegs.PLLCR.bit.DIV = 10; // 配置处理器锁相环,倍频系数为5
SysCtrlRegs.HISPCP.all = 0x1; // 配置高速外设时钟分频系数: 2
SysCtrlRegs.LOSPCP.all = 0x2; // 配置低速外设时钟分频系数: 4
// 使用的外设时钟时钟设置:
// 一般不使用的外设的时钟禁止,降低系统功耗
SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1; // 使能SCI模块的时钟
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
EDIS;
}
void SCI_Init(void)
{
SciaRegs.SCICCR.all =0x0007; // 1bit 停止位 无循环模式
// 无极性, 字符长度:8 bits,
// 异步模式, 空闲线协议
SciaRegs.SCICTL1.all =0x0003; // 使能 TX, RX, 内部 SCICLK,
// 禁止 RX ERR, SLEEP, TXWAKE
SciaRegs.SCIHBAUD = 487 >> 8 ; // 波特率:9600(LSPCLK = 37.5MHz) ;
SciaRegs.SCILBAUD = 487 & 0x00FF;
SciaRegs.SCICTL1.all =0x0023; // 使SCI退出复位
}
//===========================================================================
// 代码结束.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -