您好,您能帮忙看看程序,哪里错了吗?
我的系统设置的是
SysCtrlRegs.HISPCP.all = 0x0001;//HSPCLK=75MHZ
SysCtrlRegs.LOSPCP.all = 0x0002;//LSPCLK=37.5MHZ
SciaRegs.SCIHBAUD = 0x01;
SciaRegs.SCILBAUD = 0xe7; //波特率为9600
1、初始化系统模块程序:
void InitSysCtrl(void)
{
Uint16 i;
EALLOW;
// On TMX samples, to get the best performance of on chip RAM blocks M0/M1/L0/L1/H0 internal
// control registers bit have to be enabled. The bits are in Device emulation registers.
DevEmuRegs.M0RAMDFT = 0x0300;
DevEmuRegs.M1RAMDFT = 0x0300;
DevEmuRegs.L0RAMDFT = 0x0300;
DevEmuRegs.L1RAMDFT = 0x0300;
DevEmuRegs.H0RAMDFT = 0x0300;
// Disable watchdog module
SysCtrlRegs.WDCR= 0x0068;
// Initalize PLL
SysCtrlRegs.PLLCR = 0xA; ///0000 1010 CLKIN = (OSCCLK * 10.0)/2
// Wait for PLL to lock
for(i= 0; i< 5000; i++){}
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
SysCtrlRegs.HISPCP.all = 0x0001;
SysCtrlRegs.LOSPCP.all = 0x0002;
// Peripheral clock enables set for the selected peripherals.
SysCtrlRegs.PCLKCR.bit.EVAENCLK=1;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=1;
SysCtrlRegs.PCLKCR.bit.SCIENCLKA=1;
EDIS;
}
2、初始化SCI程序:
void InitSci(void)
{
// Initialize SCI-A:
EALLOW;
GpioMuxRegs.GPFMUX.all = 0x0030;
EDIS;
/* loopback 8 bit data */
SciaRegs.SCICCR.all = 0x07; // 1 bit stop, disable parity, idle mode, 8 bits data
SciaRegs.SCICTL1.all = 0x03; // enable TX
SciaRegs.SCICTL2.all = 0x03; //
////////////////////9600///19200/////
SciaRegs.SCIHBAUD = 0x01;//0x00;
SciaRegs.SCILBAUD = 0xe7;//0xa2;
SciaRegs.SCICTL1.all = 0x23;
PieCtrl.PIEIER9.bit.INTx1 = 1;
PieCtrl.PIEIER9.bit.INTx2 = 1;
//tbd...
// Initialize SCI-B:
//tbd...
}
/********************************************************************************
name: int SciaTx_Ready(void)
input: none
output: i 1: ready
0: busy
*********************************************************************************/
int SciaTx_Ready(void)
{
unsigned int i;
if(SciaRegs.SCICTL2.bit.TXRDY == 1)
{
i = 1;
}
else
{
i = 0;
}
return(i);
}
/********************************************************************************
name: int SciaRx_Ready(void)
input: none
output: i 1: new data
0: none
*********************************************************************************/
int SciaRx_Ready(void)
{
unsigned int i;
if(SciaRegs.SCIRXST.bit.RXRDY == 1)
{
i = 1;
}
else
{
i = 0;
}
return(i);
}
3、主程序,SCI采用查询方式实现数据发送接收
#include "DSP28_Device.h"
unsigned int SCiRxData[100];
unsigned int i,j,SendFlag;
void main(void)
{
InitSysCtrl(); //初始化系统
DINT; //关中断
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl(); //初始化PIE中断
InitPieVectTable(); //初始化PIE中断矢量表
InitSci(); //初始化SCIA寄存器
for(i = 0; i < 100; i++)//初始化变量
{
SCiRxData = 0x0000;
}
i = 0;
j = 0;
SendFlag = 0;
#if SCIA_INT //设置中断服务程序入口地址/
EALLOW;
PieVectTable.TXAINT = &SCITXINTA_ISR;
PieVectTable.RXAINT = &SCIRXINTA_ISR;
EDIS;
IER |= M_INT9; //开中断
#endif
EINT; // Enable INTM
ERTM; // EnableDBGM
for(;;)
{
if((SciaTx_Ready() == 1) && (SendFlag == 1))
{
SciaRegs.SCITXBUF = SCiRxData;
SendFlag = 0;
i++;
if(i == j)
{
i = 0;
j = 0;
}
}
#if !SCIA_INT
if(SciaRx_Ready() == 1)
{
SCiRxData[j] = SciaRegs.SCIRXBUF.all;
SendFlag = 1;
j++;
if(j == 100)
{
j = 0;
}
}
#endif
}
}
|