大家好!采用DSP28335通过XINT与CPLD通讯,在通讯过程中发现,DSP在向定义的地址写入数据时,所有地址都有数据,什么原因?下面是配置的完整代码
#include "DSP2833x_Device.h" // DSP2833x芯片设备头文件
#include "DSP2833x_Examples.h" // DSP2833x示例代码文件
// 定义控制 LED 的宏
#define LED1_ON GpioDataRegs.GPASET.bit.GPIO2 = 1 // 点亮 LED1
#define LED1_OFF GpioDataRegs.GPACLEAR.bit.GPIO2 = 1 // 熄灭 LED1
#define LED2_ON GpioDataRegs.GPASET.bit.GPIO1 = 1 // 点亮 LED2
#define LED2_OFF GpioDataRegs.GPACLEAR.bit.GPIO1 = 1 // 熄灭 LED2
//
//// 定义外设地址
//#define ExRamStart 0X4000 // 区域 0 起始地址
//#define IntADD (*(volatile int16 *)(ExRamStart + 0x000B)) // 读取地址
//#define CntlsADD (*(volatile int16 *)(ExRamStart + 0x000C)) // 写入地址 1
//#define SentADD (*(volatile int16 *)(ExRamStart + 0x000F)) // 写入地址 2
//定义起始地址
Uint16 *ExRamStart = (Uint16 *)0x4000; // 外部RAM起始地址,16位数据存储
#define IntADD *(volatile Uint16 *)0x400B // 接收地址
#define IntADD1 *(volatile Uint16 *)0x400C // 接收地址
#define CntlsADD *(volatile Uint16 *)0x400D // 发送地址
#define SentADD *(volatile Uint16 *)0x400E // 发送地址
// 全局变量
volatile Uint16 sent_data = 0;
volatile Uint16 sent_data1 = 0;
volatile Uint16 received_data = 0;
volatile Uint16 received_data1 = 0;
#define MAX_HISTORY 16 // 定义历史数据的最大数量
volatile Uint16 history_data[MAX_HISTORY];
volatile Uint16 history_index = 0;
// 函数声明
void configtestled(void);
void init_zone0(void);
void main(void)
{
// 初始化系统
InitSysCtrl();
init_zone0();
// 禁用所有中断
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// 配置 LED GPIO
configtestled();
while (1)
{
// 写入数据到外设
CntlsADD = sent_data;
SentADD = sent_data1;
DELAY_US(100); // 确保写入操作稳定
// 从外设读取数据
received_data = IntADD;
received_data1 = IntADD1;
// 存储历史数据
history_data[history_index] = received_data;
history_index = (history_index + 1) % MAX_HISTORY;
// 根据数据状态控制 LED
if (received_data == sent_data) {
LED1_ON;
LED2_ON;
} else {
LED1_OFF;
LED2_OFF;
}
// 更新发送数据,循环变化
//sent_data = (sent_data + 1) & 0x000F;
//sent_data1 = (sent_data1 + 1) & 0x00FF;
sent_data = 0x000F;
sent_data1 =0x000C;
DELAY_US(1000); // 避免循环过快
}
}
// 配置 LED GPIO
void configtestled(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO2 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO2 = 1; // 熄灭 LED1
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO1 = 1;
GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; // 熄灭 LED2
EDIS;
}
// 初始化外部存储接口
void init_zone0(void)
{
InitXintf16Gpio();
EALLOW;
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
XintfRegs.XINTCNF2.bit.WRBUFF = 3;
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
XintfRegs.XINTCNF2.bit.CLKMODE = 1;
XintfRegs.XTIMING0.bit.XWRLEAD = 2;
XintfRegs.XTIMING0.bit.XWRACTIVE = 3;
XintfRegs.XTIMING0.bit.XWRTRAIL = 2;
XintfRegs.XTIMING0.bit.XRDLEAD = 2;
XintfRegs.XTIMING0.bit.XRDACTIVE = 3;
XintfRegs.XTIMING0.bit.XRDTRAIL = 2;
XintfRegs.XTIMING0.bit.X2TIMING = 0;
XintfRegs.XTIMING0.bit.USEREADY = 0;
XintfRegs.XTIMING0.bit.READYMODE = 1;
XintfRegs.XTIMING0.bit.XSIZE = 3;
EDIS;
asm(" RPT #7 || NOP");
}
您好!非常感谢您回答我的问题,上述图片是Memory Browser中不同地址的数据,其中0X400A~0x400D,是接收CPLD回传的数据,从地址