/******************************************************************/
/*Copyright (C), 2008-2009, 力天电子,LiTian Tech.Co.Ltd. */
/* Module Name : SCIB */
/* File Name : main.c */
/* Author : 侯长波 */
/* Create Date : 2009/10/1 */
/* Version : 1.0 */
/* Function : SCIB */
/* Description : SCIB操作,发送和接收字符、字符串 */
/* Support : www.LT430.com */
/******************************************************************/
/*****************头文件********************/
#include "DSP281x_Device.h"
#include "System.h"
/****************端口宏定义*****************/
/***************全局变量定义****************/
unsigned char SCIB_RX_BUF[16]={0};//接收数据存储区
unsigned char SCIB_TX_BUF[16]={1,2,3,4,5,6,7,8,0};//发送数据存储区
unsigned char N=0;
/****************函数声明*******************/
void Init_SCIB(void);
void Send_Char_SCIA(char temp);
void Send_Char_SCIB(char temp);
void Send_String_SCIB(char *String);
char Get_Char_SCIB(void);
interrupt void SCIB_RXINT(void);
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:配置SCIB */
/*------------------------------------------*/
void Init_SCIB(void)
{
EALLOW;
GpioMuxRegs.GPGMUX.bit.SCITXDB_GPIOG4 = 1; //配置 SCIB-RX
GpioMuxRegs.GPGMUX.bit.SCIRXDB_GPIOG5 = 1; //配置 SCIB-TX
EDIS;
ScibRegs.SCICTL1.all =0x0003; // 使能 TX, RX, 内部 SCICLK,
// 禁止 RX ERR, SLEEP, TXWAKE
ScibRegs.SCICCR.all =0x0007; // 1bit 停止位 无循环模式
// 无极性, 字符长度:8 bits
// 异步模式,空闲线协议
ScibRegs.SCIHBAUD = 0x0001; // 波特率:9600(LSPCLK = 37.5MHz);
ScibRegs.SCILBAUD = 0x0085;
ScibRegs.SCICTL2.bit.RXBKINTENA = 1;// 使能SCI接收中断
ScibRegs.SCICTL1.all =0x0023; // 使SCI退出复位
EALLOW; // 解除寄存器保护
PieVectTable.RXBINT = &SCIB_RXINT;//用SCIB中断函数入口更新PIE向量表
EDIS; // 使能寄存器保护
PieCtrlRegs.PIEIER9.bit.INTx3 = 1;//使能PIE内的 SCIB_RX_INT中断
IER |= M_INT9; // 使能 CPU INT 9
EINT; // 全局中断使能INTM
}
/*------------------------------------------*/
/*形式参数:char */
/*返回值:void */
/*函数描述:发送一个字符 */
/*------------------------------------------*/
void Send_Char_SCIB(char temp)
{
ScibRegs.SCITXBUF=temp;
while ( ScibRegs.SCICTL2.bit.TXRDY == 0);//状态检测模式
while ( ScibRegs.SCICTL2.bit.TXEMPTY == 0);//状态检测,等待发送标识为空
}
/*------------------------------------------*/
/*形式参数: char *String */
/*返回值:void */
/*函数描述:发送一个字符串 */
/*------------------------------------------*/
void Send_String_SCIB(char *String)
{
while(*String !='\0')
{
Send_Char_SCIB(*String++);
}
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:char */
/*函数描述:接收一个字符 */
/*------------------------------------------*/
char Get_Char_SCIB(void)
{
DINT;//关闭总中断
while(ScibRegs.SCIRXST.bit.RXRDY != 1);//等待接收完毕
EINT; //开总中断
return (ScibRegs.SCIRXBUF.all); // 返回接收到的数据
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:SCIB中断处理函数 */
/*------------------------------------------*/
interrupt void SCIB_RXINT(void)
{
DINT;//关闭总中断
SCIB_RX_BUF[N++]=ScibRegs.SCIRXBUF.bit.RXDT;
PieCtrlRegs.PIEACK.all |= BIT9; //响应中断
EINT; //开总中断
}
/*------------------------------------------*/
/*形式参数:void */
/*返回值:void */
/*函数描述:扫描按键 */
/*------------------------------------------*/
void main(void)
{
InitSysCtrl(); // 系统初始化子程序,在DSP28_sysctrl.c中
DINT; // 关闭总中断
IER = 0x0000; // 关闭外设中断
IFR = 0x0000; // 清中断标志
InitPieCtrl(); //初始化PIE控制寄存器
InitPieVectTable(); //使能中断向量表
Init_SCIB();
Send_String_SCIB("Welcome to LiTian!");
while(1);
}
如上所示,我用的是李天的开发板,目的是希望能做成串口通信,可是将此程序下载进去以后,用相对应的串口助手发送数据根本接收不到,是程序问题还是调试助手的问题,各位有没有什么好的串口助手推荐啊 |