找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3163|回复: 0
打印 上一主题 下一主题
收起左侧

【已经解决,谢谢】CC2530 uart0 DMA通道1数据传输问题,200元酬谢

[复制链接]
跳转到指定楼层
楼主
ID:210688 发表于 2017-6-13 10:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 sihhepl 于 2017-6-19 22:17 编辑

200元酬谢,请各位大侠帮我调下程序,谢谢啦!我的QQ:79422195,请标注“51黑DMA”

我使用cc2530的DMA channel 1将接收到的串口(uart0)数据存储在uartRxBuf内,程序如下。在中断函数中,根据DMAIRQ的DMAIF1位是否置1来判断是否传输完成DATA_COUNT字节的数据。如果DATA_COUNT为1,则程序没有问题,接收数据正常,如果DATA_COUNT大于1,则程序不能产生中断。请各位大侠帮我看下程序,谢谢啦!

#define HAL_URX0_DMA_CH        1
#define DATA_COUNT              10
uint8 uartRxBuf[15] = {0};
void HalDma_uart( void )
{
    halDMADesc_t *ch;
    ch = HAL_DMA_GET_DESC1234(HAL_URX0_DMA_CH)
    ch->srcAddrH = HI_UINT16(&X_U0DBUF);
    ch->srcAddrL = LO_UINT16(&X_U0DBUF);
    ch->dstAddrH = HI_UINT16(uartRxBuf);
    ch->dstAddrL = LO_UINT16(uartRxBuf);
    ch->vLen     = 0x00;// Use fixed length DMA transfercount
    ch->lenH     = HI_UINT16(DATA_COUNT);
    ch->lenL     = LO_UINT16(DATA_COUNT);
    ch->wordSize =HAL_DMA_WORDSIZE_BYTE;// Perform 1-byte transfers
    ch->tMode   =HAL_DMA_TMODE_SINGLE;// Single byte transfer per DMA trigger
    ch->trig     = HAL_DMA_TRIG_URX0;// DMA trigger =USARTx RX complete
    ch->srcInc   = HAL_DMA_SRCINC_0;// Do not incrementsource pointer, points to USART U0BUF register.
    ch->destInc  = HAL_DMA_DSTINC_1;// Increment destinationpointer by 1 byte address after each transfer.
    ch->irqMask  = HAL_DMA_IRQMASK_DISABLE;// Enable DMAinterrupt to the CPU
    ch->m8       = HAL_DMA_M8_USE_8_BITS;// Use all 8bits for transfer count
    ch->priority =HAL_DMA_PRI_HIGH;// DMA memory access has low priority
     /* The DMAconfiguration data structure may reside at any location in
     * unified memoryspace, and the address location is passed to the DMA
     * through DMA1CFGH:DMA1CFGL.
     */
            HAL_DMA_CLEAR_IRQ(HAL_URX0_DMA_CH);
            HAL_DMA_SET_ADDR_DESC1234( ch );
    HAL_DMA_ARM_CH(HAL_URX0_DMA_CH); // Arm DMAchannel 1
    //apply 45 NOP's forloading DMA configuration   
    asm("NOP");asm("NOP");//45clk periods
    //Enable the DMAinterrupt (IEN1.DMAIE = IEN0.EA = 1),
    //and clear potentialpending DMA interrupt requests (IRCON.DMAIF = 0)
    IEN0 |= 0x80;
    IEN1 |= 0x01;
    IRCON &= ~0x02;
    // Enable UARTx RX
    U0CSR |= 0x40;  
}
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表