?? sci_status.c
字號(hào):
//===========================================================================
// 文件名稱(chēng): SCI_status.c
//
// 功能描述: DSP28 SCI - 同計(jì)算機(jī)通信,采用超級(jí)中斷接受數(shù)據(jù)
// 間隔2秒DSP向計(jì)算機(jī)發(fā)送字符"2812-UART is fine !"
// SCI配置 : 波特率 9600 ,數(shù)據(jù)長(zhǎng)度 8 Bit , 無(wú)極性 , 1位停止位
//
//===========================================================================
#include "DSP281x_Device.h"
// 使用的函數(shù)聲明
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內(nèi)核寄存器
Gpio_select(); // 配置GPIO復(fù)用功能寄存器
SCI_Init(); // SCI接口初始化
while(1)
{
SciaRegs.SCITXBUF=message[index++];
while ( SciaRegs.SCICTL2.bit.TXEMPTY == 0);
//狀態(tài)檢測(cè)模式:
//狀態(tài)檢測(cè),等待發(fā)送標(biāo)識(shí)為空:TXEMPTY = 0
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // 看門(mén)狗控制
SysCtrlRegs.WDKEY = 0xAA;
EDIS;
if (index > 26)
{
index =0;
for(i=0;i<15000000;i++) // 軟件延時(shí),近似2秒.
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55; // 看門(mén)狗控制
SysCtrlRegs.WDKEY = 0xAA; // 看門(mén)狗控制
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; // 設(shè)置所有 GPIO 輸入的量化值等于0
GpioMuxRegs.GPBQUAL.all = 0x0;
GpioMuxRegs.GPDQUAL.all = 0x0;
GpioMuxRegs.GPEQUAL.all = 0x0;
EDIS;
}
void InitSystem(void)
{
EALLOW;
SysCtrlRegs.WDCR= 0x00AF; // 配置看門(mén)狗
// 0x00E8 禁止看門(mén)狗,預(yù)定標(biāo)系數(shù)Prescaler = 1
// 0x00AF 不禁止看門(mén)狗, 預(yù)定標(biāo)系數(shù)Prescaler = 64
SysCtrlRegs.SCSR = 0; // 看門(mén)狗產(chǎn)生復(fù)位
SysCtrlRegs.PLLCR.bit.DIV = 10; // 配置處理器鎖相環(huán),倍頻系數(shù)為5
SysCtrlRegs.HISPCP.all = 0x1; // 配置高速外設(shè)時(shí)鐘分頻系數(shù): 2
SysCtrlRegs.LOSPCP.all = 0x2; // 配置低速外設(shè)時(shí)鐘分頻系數(shù): 4
// 使用的外設(shè)時(shí)鐘時(shí)鐘設(shè)置:
// 一般不使用的外設(shè)的時(shí)鐘禁止,降低系統(tǒng)功耗
SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1; // 使能SCI模塊的時(shí)鐘
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 停止位 無(wú)循環(huán)模式
// 無(wú)極性, 字符長(zhǎng)度:8 bits,
// 異步模式, 空閑線協(xié)議
SciaRegs.SCICTL1.all =0x0003; // 使能 TX, RX, 內(nèi)部 SCICLK,
// 禁止 RX ERR, SLEEP, TXWAKE
SciaRegs.SCIHBAUD = 487 >> 8 ; // 波特率:9600(LSPCLK = 37.5MHz) ;
SciaRegs.SCILBAUD = 487 & 0x00FF;
SciaRegs.SCICTL1.all =0x0023; // 使SCI退出復(fù)位
}
//===========================================================================
// 代碼結(jié)束.
//===========================================================================
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -