您好:
我 在代码调试中遇到了一些问题,下面是我的源代码
#include "all_header.h"
静态 uint32_t Received_ID;
g_dmaCTRL g_dmaCTRLPKT;/*DMA 控制数据包配置堆栈*/
#define D_COUNT 8.
#define D_SIZE 8
int 数据;
uint32 dma_Comp_Flag;
uint32 cnt = 0;
uint32错误= 0;
uint32 TX_DONE = 0;
uint32 CPUCount = 0;
uint32 timer0=0;
uint8_t TX_data1[D_count]={1、2、3、4、4、4、 3、2、1};/*系统 ram*/中的传输缓冲区
uint8_t TX_data2[D_count]={1、3、5、7、9、 11、13、15};
uint8_t TX_data3[D_count]={2、4、6、8、10、 12、14、16};
uint8_t rx_data[D_count]={0};/*系统 ram*/中的接收缓冲区
空延迟(uint32时间);
void dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint32 dsize);
void dmaGroupA 通知(dmaInterrupt_t inttype、uint32通道)
{
DMA_Comp_Flag = 0x5555AAAA;
}
void main (void)
{
_enable_interrupt_();/*在 Cortex R4*/中启用 IRQ 中断
DMA_Comp_Flag = 0xAAAA5555;//重置标志*
rtiInit();/*初始化 RTI 驱动程序*/
rtiEnableNotification (rtiNOTIFICATION_COMPARE0);/*启用 RTI 比较0中断通知*/
_enable_IRQ ();
rtiStartCounter (rtiCOUNTER_BLOCK0);/*启动 RTI 计数器块0*/
u8gv_tmr_addr = get_tmr_addr ();
canInit();/*初始化 CAN*/
vimInit();
CANREG1->CTL |=(UINT32)(1<<20);/*启用 CTL 寄存器中的 DE3位以在 IF3接收数据时触发 DMA */
canREG1->IF3OBS = 0x0000001AU;//读取 ARB、数据 A 和 B - 8字节*/
canREG1->IF3UEy[0]= 0xFFFFFFFFU;/*为自动更新配置的 RX 2、4、6的消息框*/
/*- DMA 配置*/
dmaEnable();//启用 DMA */
dmaEnableInterrupt (DMA_CH0、FTC);//在接收数据后启用中断*
dmaReqAssign (DMA_CH0、16U);/*分配 DMA 请求:带有请求线路的通道0 - 16 (DCAN1IF3)*/
vimEnableInterrupt ((UINT32) 33U、SYS_IRQ);/* VIM DMA FTCA:帧传输完成*/
dmaConfigCtrlRxPacket ((uint32)(&(canREG1->IF3DATx[0]))、(uint32)(&Rx_DATA)、1);
dmaSetCtrlPacket (dma_ch0、g_dmaCTRLPKT);/*设置用于传输的 DMA 控制包*/
dmaREG->GCHIENAS |= 1<
while (1)
{
DMA_Comp_Flag = 0xAAAA5555;//重置标志*
canTransmit (canREG1、canMESSAGE_box3、(const uint8 *)&TX_data2[0]);//在 CAN1上传输*
while (dma_Comp_Flag!= 0x5555AAAA);//等待 DMA 中断 ISR 设置 Flag *
}
返回0;
}
void canMessageNotification (canBASE-t *节点、uint32_t MessageBox)
{
while (!canIsRxMessageArrived (canREG1、canMESSAGE_BOX4))
;
canGetData (canREG1、canMESSAGE_BOX4、(uint8 *)&Rx_DATA[0]);
Received_ID =(canREG1->IF3ARB & 0x1FFC0000">18;
printf("rx_data:%x %x %x %x %x %x %x %x %x \n"、Rx_DATA[0]、Rx_DATA[1]、Rx_DATA[2]、Rx_DATA[3]、Rx_DATA[4]、Rx_DATA[5]、Rx_DATA[6]、Rx_DATA[7]);
printf (“Received_ID:%x\n",Received_ID);
/*-将 DMA 通道设置为在软件请求时触发*/
dmaSetChEnable (DMA_CH0、DMA_SW);
}
void dmaConfigCtrlRxPacket (uint32 Sadd、uint32 dadd、uint32 dsize)
{
G_dmaCTRLPKT.Sadd =添加;//源地址*/
G_dmaCTRLPKT.DADD =添加;/*目标地址*/
G_dmaCTRLPKT.CHCTRL = 0;/*通道控制*/
G_dmaCTRLPKT.FRCNT = 1;/*帧计数*/
G_dmaCTRLPKT.ELCNT = dsize;/*元素计数*/
G_dmaCTRLPKT.ELDOFFSET = 0;/*元素目标偏移量*
G_dmaCTRLPKT.ELSOFFSET = 0;/*元素源偏移*
G_dmaCTRLPKT.FRDOFFSET = 0;/*帧目标偏移量*
G_dmaCTRLPKT.FRSOFFSET = 0;/*帧源偏移*
G_dmaCTRLPKT.PORTASGN = 4;/*端口 b *
G_dmaCTRLPKT.RDSIZE = ACCESS_64_BIT;/*读取大小*
G_dmaCTRLPKT.WRSIZE = ACCESS_64_BIT;/*写入大小*
G_dmaCTRLPKT.tType = FRAME_TRANSFSION;/* TRANSFSION TYPE 一个请求触发一帧传输*
G_dmaCTRLPKT.ADDMODERD = ADDR_FIXED;/*地址模式读取*/
G_dmaCTRLPKT.ADDMODEWR = ADDR_FIXED;/*地址模式写入*/
G_dmaCTRLPKT.AUTOINIT = AUTOINIT_ON;/*自动初始化*/
}
/*用户代码结束*/
主要问题是:当我的 IF2中收集的数据更新后、为什么相应 IF3监控的数据没有同步和更改?