微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > 如何用DSP2818将SCI通信得到的方波通过GPIO口输出

如何用DSP2818将SCI通信得到的方波通过GPIO口输出

时间:10-02 整理:3721RD 点击:
现在通过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 !='\0')
          {
    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;   //开总中断
}

谢谢小编支持一下

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top