工具/软件:TI C/C++编译器
我正在尝试运行示例代码example_2802xSci_FDLB_int.c。 我更改了顶部的CPU频率,并添加了一个条件,如果CPU频率为60 MHz,则将波特率设置为11.52万。 真实术语仍显示垃圾价值。
下面是带有更改的示例代码-
//#######################################################################
//
//文件:F2802x_examples/scia_loopback_interrups/example_F2802xSci_FDLB_int.c.</s>2802
//
//标题:F2802x器件SCI数字回路程序。
//
//组:C2000
//目标器件:TMS320F2802x
//
//! \addtogroup example_list
//! <H1>SCI数字回路,带中断</H1>
//!
//! 此程序是一个使用内部环回的SCI示例
//! 外围设备。 同时使用中断和SCI FIFO。
//!
//! 发送一个数据流,然后将其与接收的数据流进行比较。
//!
//! SCI-A发送的数据如下所示:\n
//! 00 01 \n
//! 01 02 \n
//! 02 03 \n
//! .... \n
//! FE FF \n
//! FF 00 \n
//! 等等。
//!
//! 这种模式将永远重复。
//!
//! 监视变量:
//! - sdataA -正在发送的数据
//! - rdataA -已接收数据
//! - RDATA_pointA -跟踪我们在数据流中的位置。
//! 这用于检查传入的数据
//
//(C)版权所有2012,Texas Instruments,Inc.
//#######################################################################
//$TI发行版:软件包名称$
//$发布日期:软件包发布日期$
//#######################################################################
#include "DSP28x_Project.h"//设备头文件和示例包括文件
#include <stdio.h>
#include <file.h>
#include "common/include/adc.h"
#include "common / include/clk.h"
#include "common / include/flash.h"
#include "common/include/gPIO.h"
#include "common/include/pie.h"
#include "common/include/pll.h"
#include "common/include/sci.h"
#include "common/include/wdog.h"
#define CPU_FREQ 60E6 //默认= 40 MHz。 对于50 MHz设备,更改为50E6
#define LSPCLK_FREQ CPU_FREQ/4
#define SCI_FREQ 100E3
#define SCI_PRD (LSPCLK_FREQ/(SCI_FREQ*8))-1
//本文件中找到的函数的prototype语句。
__interrupt void sciaTxFifoIsr (void);
__interrupt void sciaRxFifoIsr (void);
__interrupt void scibTxFifoIsr (void);
__interrupt void scibRxFifoIsr (void);
void scia_init(void);
void scia_fifo_init(void);
void错误(void);
//全局变量
uINT16_t sdataA[2];//发送SCI-A的数据
uINT16_t rdataA[2];//接收到SCI-A的数据
UINT16_t RDATA_pointA;//用于检查接收到的数据
adc_handle myAdc;
clk_handle myClk;
FLASH_HANDLE myFlash;
GPIO _手柄myGpio;
PIE_HANDLE myPIE;
Sci_Handle mySci;
Void主(void)
{
uINT16_t i;
cpu_handle myCpu;
PLL_HANDLE myPll;
WDOG_Handle myWDog;
//初始化此应用程序所需的所有句柄
myAdc = adc_init((void *)adc_base_addr, sizeof(ADC_Obj);
myClk = clk_init((void *)clk_base_addr, sizeof(clk_obj));
myCpu = CPU_INIT ((void *) NULL,sizeof (CPU_Obj));
myFlash = flash_init((void *)flash_base_addr, sizeof(flash_Obj));
myGpio = gPIO_INIT ((void *) gPIO_BASE ADDR,sizeof (gPIO_Obj));
myPie = PIE_INIT ((void *) PIE_base_ADDR,sizeof (PIE_Obj));
myPll = PLL_INIT ((void *) PLL_base_ADDR,sizeof (PLL_Obj));
mySci = SCI_INIT ((void *) SCIA_base_ADDR,sizeof(SCI_Obj));
myWDog = WDOG_INIT ((void *) WDOG_base_ADDR,sizeof (WDOG_Obj));
//执行基本系统初始化
WDOG_DISABLE (myWDog);
clk_enableAdcClock(myClk);
(*Device_cal)();
//选择内部振荡器1作为时钟源
CLK_setOscSrc (myClk,CLK_OscSrc_Internal);
//为x10 /2设置PLL,其输出频率为50MHz =10MHz *10/ 2
PLL_setup (myPll,PLL_Multiplier_12,PLL_DivideSelect_CLKIN_BY_2);
//禁用PIE和所有中断
PIE_DISABLE (myPie);
PIE_DisableAllInts(myPie);
CPU_disableGlobalInts (myCpu);
CPU_clearIntFlags (myCpu);
//如果从闪存复制运行,则RAM仅对RAM起作用
#ifdef _flash
memcpy (&RamfuncsRunStart,&RamfuncsLoadStart,(size_t)&RamfuncsLoadSize);
#endif
//初始化GPIO
GPIO设置上拉(myGpio,GPIO编号_28,GPIO _上拉_启用);
GPIO设置上拉(myGpio,GPIO编号_29,GPIO _上拉_禁用);
GPIO_setQualification (myGpio,GPIO编号_28,GPIO _Qual_Async);
GPIO_setMode (myGpio,GPIO编号_28,GPIO _28_Mode_SCIRXDA);
GPIO设置模式(myGpio,GPIO编号_29,GPIO _29_Mode_SCITXDA);
//设置调试向量表并启用PIE
PIE_setDebugIntVectorTable(myPie);
PIE_ENABLE (myPie);
//本示例中使用的中断被重新映射到
//此文件中找到ISR函数。
EALLOW;//这是写入EALLOW保护寄存器所必需的
// PieVectorTable.SCIRXINTA =&sciaRxFifoIsr;
((PIE_Obj *)myPie)->SCIRXINTA =&sciaRxFifoIsr;
// PieVectorTable.SCITXINTA =&sciaTxFifoIsr;
((PIE_Obj *)myPie)->SCITXINTA =&sciaTxFifoIsr;
EDIS;//这是禁用写入EALLOW保护寄存器所必需的
//在PIE矢量表中注册中断处理程序
PIE_registerPieIntHandler (myPie,PIE_GroupNumber_9,PIE_SubGroupNumber_1,(intVec_t)&sciaRxFifoIsr);
PIE_registerPieIntHandler (myPie,PIE_GroupNumber_9,PIE_SubGroupNumber_2,(intVec_t)&sciaTxFifoIsr);
scia_init();//初始化SCI-A
scia_fifo_init();//初始化SCI-A Fifos
//初始化发送数据。 每次传输后,此数据
//将为下一次传输更新
用于(i = 0;I<2;I++)
{
sdataA[i]= i;
}
RDATA_pointA = sdataA[0];
//启用此示例所需的中断
PIE_ENableInt (myPie,PIE_GROUPNumber_9,PIE_InterruptSource_SCIARX);
PIE_ENableInt (myPie,PIE_GROUPNumber_9,PIE_InterruptSource_SCIATX);
CPU_enableInt (myCpu,CPU_IntNumber_9);
CPU_enableGlobalInts (myCpu);
用于(;){
}
}
作废错误(void)
{
_ASM (" ESTOP0");//测试失败!! 停止!
对于(;){
}
}
__interrupt void sciaTxFifoIsr (void)
{
uINT16_t i;
对于(i=0;i< 2;i++){
//发送数据
sci_putDataBlocking (mySci,sdataA[i]);
}
对于(i=0;i< 2;i++){
//增量发送下一个周期的数据
sdataA[i]=(sdataA[i]+1)和0x00FF;
}
//清除SCI中断标志
sci_clearTxFifoInt (mySci);
//发出PIE ACK
PIE_clearInt (myPie,PIE_GroupNumber_9);
返回;
}
__interrupt void sciaRxFifoIsr (void)
{
uINT16_t i;
IF(SCI_getRxFifoStatus(mySci)!= SCI_FifoLevel_empty){
对于(i=0;i<2;i++){
//读取数据
rdataA[i]= SCI_getData(mySci);
}
对于(i=0;i<2;i++){
//检查收到的数据
IF (rdataA[i]!=(RDATA_pointA+I)& 0x00FF)
错误();
}
RDATA_pointA =(RDATA_pointA+1)和0x00FF;
}
//清除溢出标志
Sci_clearRxFifoOvf (mySci);
//清除中断标志
sci_clearRxFifoInt(mySci);
//发布饼图
PIE_clearInt (myPie,PIE_GroupNumber_9);
返回;
}
void scia_init()
{
clk_enableSciaClock(myClk);
// 1停止位,无回送
//无奇偶校验,8个字符位,
//异步模式,空闲线路协议
sci_disableParity (mySci);
Sci_setNumStopBits (mySci,SCI_NumStopBits_One);
Sci_setCharLength (mySci,SCI_CharLength_8_Bits);
//启用TX,RX,内部SCICLK,
//禁用RX ERR,睡眠,TXWAKE
sci_enableTx (mySci);
sci_enablerx (mySci);
sci_enableTxInt(mySci);
sci_enableRxInt(mySci);
sci_enableLoopBack (mySci);
// SCI BRR = LSPCLK/(SCI BAUDIX8)-1
#IF (CPU_FRQ_60MHz)
Sci_setBaudRate (mySci,(SCI_bauderate_e) 15);
#Elif (CPU_FRQ_50MHz)
Sci_setBaudRate (mySci,(SCI_bauderate_e) 15);
#endif
Sci_enable (mySci);
返回;
}
void scia_fifo_init()
{
sci_enableFifoEnh (mySci);
Sci_resetTxFifo (mySci);
sci_clearTxFifoInt (mySci);
Sci_resetChannels (mySci);
Sci_setTxFifoIntLevel (mySci,SCI_FifoLevel和2_字数);
sci_enableTxFifoInt(mySci);
Sci_resetRxFifo (mySci);
sci_clearRxFifoInt(mySci);
Sci_setRxFifoIntLevel (mySci,SCI_FifoLevel和2_字数);
sci_enableRxFifoInt(mySci);
返回;
}
//===========================================================================================================================================
//没有更多。
//===========================================================================================================================================