This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/TMS570LC4357:CRC | DMA

Guru**** 2478765 points
Other Parts Discussed in Thread: HALCOGEN

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/689557/ccs-tms570lc4357-crc-dma

器件型号:TMS570LC4357
主题中讨论的其他器件: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

您能不能检查其中的问题是什么。

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Ramesh、

    不明白为什么在 DMA 数据包设置中使用元素偏移4。

    您可以手动将值键入 CRC 寄存器、然后检查计算出的 CRC 值是否正确。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    我检查,但仍然不工作。

    我已从 halcogen 配置了 crc1。

    我已附加 sys_main、dma.c 和 crc.c 文件。

    您能否查看并告诉我为何 properly.e2e.ti.com/.../0841.HL_5F00_crc.ce2e.ti.com/.../2476.HL_5F00_sys_5F00_dma.ce2e.ti.com/.../5556.HL_5F00_sys_5F00_main.c 不工作

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、John、

    您是说代码正常工作、但生成的 CRC 与原始值不匹配吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    只需阅读您的代码。 以下是我的评论:

    1、两个 DMA 通道的 PORTASGN 应为1而不是4。 1是 PORta_read_PORTB_write

    DMA Packet0:帧计数为3、但您只有一个64位数据。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你(们)好

    感谢您的反馈。
    我将进行检查并告知您。

    谢谢你。