主题中讨论的其他器件: HALCOGEN
控制器:TMS570LC4357
工具使用:CCS、HALCOGEN
问题:在 HALCOGEN SCI 与 DMA 之间为 TMS570LC43xx 提供的示例不起作用
按照示例文件中给出的所有配置操作、只是我使用的是共享 RAM 区域、我在.cmd 文件中正确配置了该区域。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 使用的代码//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*用户代码结束*/
#include "hL_system.h"
#include "HL_SYS_DMA.h"
#include "hL_sci.h"
#include "stdio.h"
/*用户代码结束*/
* @应用程序主函数简介
* @请注意、默认情况下、此函数为空。
*
* 此函数在启动后调用。
* 用户可以使用此函数来实现应用程序。
*
#define size 100
/*如果 LOOPBACKMODE 定义为0、则需要外部连接(SCI3 TX -> SCI4 RX)*/
#define LOOPBACKMODE 1.
uint8 TX_DATA[SIZE];
uint8 RX_DATA[SIZE]={0xff};
#pragma SET_DATA_SECTION ()
#if ((__little_endian__= 1)||(__little_ENDIAN__= 1)
#define SCI3_TX_ADDR ((uint32_t)(&(sciREG3->TD))
#define SCI3_RX_ADDR ((uint32_t)(&(sciREG3->RD))
#define SCI4_TX_ADDR ((uint32_t)(&(sciREG4->TD))
#define SCI4_RX_ADDR ((uint32_t)(&(sciREG4->RD))
其他
#define SCI3_TX_ADDR ((uint32_t)(&(sciREG3->TD))+ 3)
#define SCI3_RX_ADDR ((uint32_t)(&(sciREG3->RD))+ 3)
#define SCI4_TX_ADDR ((uint32_t)(&(sciREG4->TD))+ 3)
#define SCI4_RX_ADDR ((uint32_t)(&(sciREG4->RD))+ 3)
#endif
#define DMA_SCI3_RX DMA_REQ30
#define DMA_SCI4_TX DMA_REQ43
#define DMA_SCI4_RX DMA_REQ42
#define SCI_SET_RX_DMA (1<<17)
#define SCI_SET_RX_DMA_ALL (1<<18)
/*用户代码结束*/
uint32 emacPhyAddress = 0U;
{
/*用户代码开始(3)*/
uint32 sciTxData、sciRxData;
int i;
g_dmaCTRL g_dmaCTRLPPKT1、g_dmaCTRLPPKT2;
(i=0;<size; i++)
{
TX_DATA[i]= i;
}
sciInit();
/*启用 SCI 回送*/
sciEnableLoopback (sciREG3、Digital_LBK);
while (((sciREG3->FLR & SCI_TX_INT)== 0U)||((sciREG3->FLR & 0x4)== 0x4))
{
}/*等待*/
dmaReqAssign (DMA_CH0、DMA_SCI3_TX);
dmaReqAssign (DMA_CH1、DMA_SCI3_RX);
sciRxData = SCI3_RX_ADDR;
while (((sciREG3->FLR & SCI_TX_INT)== 0U)||((sciREG3->FLR & 0x4)== 0x4))
{
}/*等待*/
dmaReqAssign (DMA_CH0、DMA_SCI3_TX);
dmaReqAssign (DMA_CH1、DMA_SCI4_RX);
sciRxData = SCI4_RX_ADDR;
G_dmaCTRLPKT1.Sadd =(uint32_t) TX_DATA; /*源地址 *
G_dmaCTRLPKT1.DADD = sciTxData; /*目标 地址 *
G_dmaCTRLPKT1.CHCTTRL = 0; /*通道控制 *
G_dmaCTRLPKT1.FRCNT =大小; /*帧计数 */
G_dmaCTRLPKT1.ELCNT = 1; /*元素计数 */
G_dmaCTRLPKT1.ELDOFFSET = 0; /*元素目标偏移量*
G_dmaCTRLPKT1.ELSOFFSET = 0; /*元素目标偏移量*
G_dmaCTRLPKT1.FRDOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT1.FRSOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT1.PORTASGN = PORTA_READ_PORTB_WRITE;
G_dmaCTRLPKT1.RDSIZE = ACCESS_8_BIT; /*读取大小 *
G_dmaCTRLPKT1.WRSIZE = ACCESS_8_BIT; /*写入大小 *
G_dmaCTRLPKT1.tType = FRAME_TRANSFSION; /* TRANSFSION TYPE *
G_dmaCTRLPKT1.ADDMODERD = ADDR_INC1; /*地址模式读取 *
G_dmaCTRLPKT1.ADDMODEWR = ADDR_FIXED; /*地址模式写入 *
G_dmaCTRLPKT1.AUTOINIT = AUTOINIT_OFF; /*自动初始 化*/
G_dmaCTRLPKT2.Sadd = sciRxData; /*源地址 */
G_dmaCTRLPKT2.DADD =(uint32_t) RX_DATA; //目标 地址 ss *
G_dmaCTRLPKT2.CHCTTRL = 0; /*通道控制 *
G_dmaCTRLPKT2.FRCNT =大小; /*帧计数 */
G_dmaCTRLPKT2.ELCNT = 1; /*元素计数 */
G_dmaCTRLPKT2.ELDOFFSET = 0; /*元素目标偏移量*
G_dmaCTRLPKT2.ELSOFFSET = 0; /*元素目标偏移量*
G_dmaCTRLPKT2.FRDOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT2.FRSOFFSET = 0; /*帧目标偏移 *
G_dmaCTRLPKT2.PORTASGN = PORTB_READ_PORTA_WRITE;
G_dmaCTRLPKT2.RDSIZE = ACCESS_8_BIT; /*读取大小 *
G_dmaCTRLPKT2.WRSIZE = ACCESS_8_BIT; /*写入大小 *
G_dmaCTRLPKT2.tType = FRAME_TRANSFSION; /* TRANSFSION TYPE *
G_dmaCTRLPKT2.ADDMODERD = ADDR_FIXED; /*地址模式读取 */
G_dmaCTRLPKT2.ADDMODEWR = ADDR_INC1; /*地址模式写入 *
G_dmaCTRLPKT2.AUTOINIT = AUTOINIT_OFF; /*自动初始 化*
dmaSetCtrlPacket (DMA_CH0、g_dmaCTRLPKT1);
dmaSetCtrlPacket (DMA_CH1、g_dmaCTRLPKT2);
dmaSetChEnable (DMA_CH0、DMA_HW);
dmaSetChEnable (DMA_CH1、DMA_HW);
dmaEnable();
/*启用 SCI3发送和接收 DMA 请求*/
sciREG3->SETINT |= SCI_SET_TX_DMA | SCI_SET_RX_DMA | SCI_SET_RX_DMA_ALL;
/*启用 SCI3发送和 SCI4接收 DMA 请求*/
sciREG3->SETINT |= SCI_SET_TX_DMA;
sciREF4->SETINT |= SCI_SET_RX_DMA | SCI_SET_RX_DMA_ALL;
#endif
{
if (RX_DATA[i]!= TX_DATA[i])
{
中断;
}
}
if (<size)
{
printf ("fail\n");
}
其他
{
printf ("Pass\n");
}
while (1);
}
/*用户代码结束*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////