现在通过SCI
通信将上位机发出的方波送给DSP,DSP接收到的都是0,1,现在想用GPIO口将这个方波输出,不知道该如何对GPIO的DAT寄存器进行操作
SCI通信的结果都保存在SCI结果寄存器中,通信程序如下,如何实现GPIO输出呢?
#include "DSP281x_Device.h"
#include "System.h"
/****************端口宏定义*****************/
/****************常量宏定义*****************/
/***************全局变量定义****************/
unsigned char SCIA_RX_BUF[16]={0};
unsigned char SCIA_TX_BUF[16]={1,2,3,4,5,6,7,8,0};
unsigned char N=0;
/****************函数声明*******************/
void Init_SCIA(void);
void Send_Char_SCIA(char temp);
void Send_String_SCIA(char *String);
char Receive_Char__SCIA(void);
interrupt void SCIA_RXINT(void);
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:主函数 */
/*------------------------------------------*/
void main(void)
{
InitSysCtrl(); // 系统初始化子程序,在DSP28_sysctrl.c中
Init_SCIA();
InitGpio();
Send_String_SCIA("Welcome");
while(1);
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:配置SCIA */
/*------------------------------------------*/
void Init_SCIA(void)
{
//配置SCITXD、SCIRXD
EALLOW;
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1; //配置 SCI-RX
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1; //配置 SCI-TX
EDIS;
//软件复位SCI,复位值
SciaRegs.SCICTL1.bit.SWRESET =0;
//设置字符格式、通信协议、通信模式
SciaRegs.SCICCR.bit.SCICHAR=7; // 字符长度:8 bits
SciaRegs.SCICCR.bit.PARITYENA=0;//禁止奇偶校验
SciaRegs.SCICCR.bit.STOPBITS=0; //停止位为1个
SciaRegs.SCICCR.bit.ADDRIDLE_MODE=0; //空闲线模式协议
//设置波特率
SciaRegs.SCIHBAUD = 0x0001; // 波特率:9600(LSPCLK = 30MHz);
SciaRegs.SCILBAUD = 0x0085;
//使能SCI发送器和接收器
SciaRegs.SCICTL1.bit.RXENA =1; // 使能接收功能
SciaRegs.SCICTL1.bit.TXENA =1; // 使能发送功能
//使能中断(包含外设级、PIE级和CPU级),设置中断向量
SciaRegs.SCICTL2.bit.RXBKINTENA = 1;// 使能SCIA接收中断
EALLOW; // 解除寄存器保护
PieVectTable.RXAINT = &SCIA_RXINT;//用SCIA中断函数入口更新PIE向量表
EDIS; // 使能寄存器保护
PieCtrlRegs.PIEIER9.bit.INTx1 = 1;// 使能PIE内的 SCIA_RX_INT中断
IER |= M_INT9;// 使能 CPU INT 9
EINT; // 全局中断使能INTM
//退出复位状态
SciaRegs.SCICTL1.bit.SWRESET =1;
}
/*------------------------------------------*/
/*形式参数:char */
/*返回值:void */
/*函数描述:发送一个字符 */
/*------------------------------------------*/
void Send_Char_SCIA(char temp)
{
SciaRegs.SCITXBUF=temp;
while ( SciaRegs.SCICTL2.bit.TXRDY == 0);//状态检测模式:
while ( SciaRegs.SCICTL2.bit.TXEMPTY == 0);//状态检测,等待发送标识为空
}
/*------------------------------------------*/
/*形式参数: char *String */
/*返回值:void */
/*函数描述:发送一个字符串 */
/*------------------------------------------*/
void Send_String_SCIA(char *String)
{
while(*String !=' ')
{
Send_Char_SCIA(*String++);
}
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:char */
/*函数描述:接收一个字符 */
/*------------------------------------------*/
char Get_Char_SCIA(void)
{
DINT;//关闭总中断
while(SciaRegs.SCIRXST.bit.RXRDY != 1);//等待接收完毕
EINT; //开总中断
return (SciaRegs.SCIRXBUF.all); // 返回接收到的数据
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:SCIB中断处理函数 */
/*------------------------------------------*/
interrupt void SCIA_RXINT(void)
{
DINT;//关闭总中断
SCIA_RX_BUF[N++]=SciaRegs.SCIRXBUF.bit.RXDT;
PieCtrlRegs.PIEACK.all = 0x0100; //响应中断
EINT; //开总中断
}
一周热门 更多>