430FR5969的DMA地址寄存器赋值问题

2019-03-24 10:24发布

本帖最后由 曾经in 于 2015-3-25 13:42 编辑

原地址寄存器和目标地址寄存器DMA0SA、DMA0DA都是SFR_20BIT类型的,不知道该怎么赋值
编译环境是CCS6
定义:
#define SFR_16BIT(address)  extern volatile unsigned int address
typedef void (* __SFR_FARPTR)();//空返回值的函数指针
#define SFR_20BIT(address) extern __SFR_FARPTR address

SFR_20BIT(DMA0SA);                            /* DMA Channel 0 Source Address */
SFR_16BIT(DMA0SAL);                           /* DMA Channel 0 Source Address */
SFR_20BIT(DMA0DA);                            /* DMA Channel 0 Destination Address */
SFR_16BIT(DMA0DAL);                           /* DMA Channel 0 Destination Address */


有官方例程,不过是用FR5967的,改为5969一样会报错
  __data16_write_addr((unsigned short) &DMA0SA,(unsigned long) 0x1C20);
                                            // Source block address
  __data16_write_addr((unsigned short) &DMA0DA,(unsigned long) 0x1C40);
                                            // Destination single address
#770-D conversion from pointer to smaller integer
强制转换也报错
        DMA0DA= (__SFR_FARPTR)&UCB0TXBUF;
#173-D invalid type conversion




好久了都没弄明白,求助大神。。。

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
曾经in
2019-03-24 22:22
< :TI_MSP430_内容页_SA7 -->
armcu 发表于 2015-3-25 14:55
没用过430的DMA,不过看你的操作。貌似有个错误,指针类型你为什么强制转换成整形呢,要转也是转换成整形指针类型的

是指这个吗?:__data16_write_addr((unsigned short) &DMA0SA,(unsigned long) 0x1C20);

这个TI的例程,这句好像是写寄存器命令


一周热门 更多>

相关问题

    相关文章