主题中讨论的其他器件:HALCOGEN
工具/软件:Code Composer Studio
你(们)好
我已将 CRC 通道1和模式配置为自动并在 halcogen 中启用 CRC 失败中断和 PSA s/w 中断。
我正在使用 DMA 通道2和通道3。
但我没有在 PSA_SIGREGL1寄存器中获得正确的值。
SYS_main.c 代码:-
#include "hL_sys_common.h"
#include "hL_system.h"
#include "HL_ESM.h"
#include "hL_sys_core.h"
#include "HL_SYS_DMA.h"
#include "freertos.h"
#include "HL_CRC.h"
#define D_SIZE 8
uint32_t CRC1_Ref[2]={0x5F7AE33、0x6233774E};
void Driver_Init (void);
void DmaInit (void);
extern void Init (void);
uint16 TX_DATA[D_SIZE]={0x1111、0x2222、0x3333、0x4444、0x5555、0x6666、0x7777、0x8888};
g_dmaCTRL g_dmaCTRLPPKT2、g_dmaCTRLPPKT3;
int main (空)
{
_enable_interrupt_();
Driver_Init();
crcREG1->CTRL2=0x00000000;
crcREG1->CTRL2 |=(CRC_AUTO)|(CRC_AUTO << 8U);
dmaSetCtrlPacket (dma_ch2、g_dmaCTRLPKT2);
dmaSetCtrlPacket (dma_ch3、g_dmaCTRLPKT3);
dmaSetChEnable (DMA_CH2、DMA_HW);
dmaSetChEnable (DMA_CH3、DMA_HW);
dmaEnable();
while (1);
}
空 DmaInit (空)
{
G_dmaCTRLPKT2.Sadd =(uint32_t)(&CRC1_Ref[0]);/*源地址*
G_dmaCTRLPKT2.DADD =(uint32_t)(&(crcREG1->REGL1));/*目标地址*/
G_dmaCTRLPKT2.CHCTTRL = 0;/*通道控制*
G_dmaCTRLPKT2.FRCNT = 1;/*帧计数*/
G_dmaCTRLPKT2.ELCNT = D_SIZE;/*元素计数*
G_dmaCTRLPKT2.ELDOFFSET = 4;/*元素目标偏移量*
G_dmaCTRLPKT2.ELSOFFSET = 0;/*元素目标偏移量*
G_dmaCTRLPKT2.FRDOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT2.FRSOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT2.PORTASGN = PORta_read_PORTB_write;//端口 b *
G_dmaCTRLPKT2.RDSIZE = ACCESS_64_BIT;/*读取大小*
G_dmaCTRLPKT2.WRSIZE = ACCESS_64_BIT;/*写入大小*
G_dmaCTRLPKT2.tType = frame_transfer;/* transfer type *
G_dmaCTRLPKT2.ADDMODERD = ADDR_INC1;/*地址模式读取*
G_dmaCTRLPKT2.ADDMODEWR = ADDR_FIXED;/*地址模式写入*
G_dmaCTRLPKT2.AUTOINIT = AUTOINIT_ON;/*自动初始化*
G_dmaCTRLPKT3.Sadd =(uint32_t) TX_DATA;/*源地址*
G_dmaCTRLPKT3.DADD =(uint32_t)(&(crcREG1->PSA_SIGREGL1));/*目标地址*/
G_dmaCTRLPKT3.CHCTTRL = 0;/*通道控制*
G_dmaCTRLPKT3.FRCNT = 1;/*帧计数*/
G_dmaCTRLPKT3.ELCNT = D_SIZE;//Pcount /*元素计数*
G_dmaCTRLPKT3.ELDOFFSET = 0;/*元素目标偏移量*
G_dmaCTRLPKT3.ELSOFFSET = 4;/*元素目标偏移量*
G_dmaCTRLPKT3.FRDOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT3.FRSOFFSET = 0;/*帧目标偏移*
G_dmaCTRLPKT3.PORTASGN = PORTB_READ_PORTA_WRITE;/*端口 b *
G_dmaCTRLPKT3.RDSIZE = ACCESS_64_BIT;/*读取大小*
G_dmaCTRLPKT3.WRSIZE = ACCESS_64_BIT;/*写入大小*
G_dmaCTRLPKT3.tType = frame_transfer;/* transfer type *
G_dmaCTRLPKT3.ADDMODERD = ADDR_OFFSET;/*地址模式读取*/
G_dmaCTRLPKT3.ADDMODEWR = ADDR_FIXED;/*地址模式写入*/
G_dmaCTRLPKT3.AUTOINIT = AUTOINIT_ON;/*自动初始化*
}
空 Driver_Init (空)
{
DmaInit();
crcInit();
}
void crcNotification (crcBASE-t * CRC、uint32_t 标志)
{
//CRC 失败;检查保存的参考 CRC
}
您能不能检查其中的问题是什么。
谢谢你。