2884|0

18

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

cc2530 通过DMA访问flash问题 [复制链接]

两个问题:首先,我用这段代码擦除35页的数据,但是在XDATA窗口看到的和读取出来放到数组里看到的都是0x00,并没有擦除,这是为什么啊?
  1. void Flash_PageErase( int pg)
  2. {
  3.   FADDRH = pg<<1;
  4.   FCTL |= 0x01; //启动页面擦除
  5.   while (FCTL & 0x80); //等待擦除完成
  6. }
复制代码
其次,我用DMA传输内存到flash的4字节数据,怎么都写不进去,底下是我的写函数,有没有高手指教一下。
  1. void WriteFlashDMA( uint16 saddr, uint16 length, uint16 flashadr) //Write Flash, DMA Method
  2. //Length Must be Divisible by 4 or last bytes fail to write
  3. {
  4. //配置DMA通道每次传送一个字节
  5.   DMA_DESC dmaConfig0;//定义DMA通道
  6.   //MEMCTR|=0X07;//将bank 7 映射到Xdata区
  7.   dmaConfig0.SRCADDRH  = (saddr >> 8) & 0x00FF; //XData - To Be Written to Flash - Gets Incremented;存储data的高8位;
  8.   dmaConfig0.SRCADDRL  = saddr & 0x00FF;//存储data地址的低8位;
  9.   dmaConfig0.DESTADDRH = (((int)&FWDATA) >> 8) & 0x00FF; //Flash Controller Data Address - Flash Controller Writes Data//存储写寄存器的地址的高8位
  10.   dmaConfig0.DESTADDRL = ((int)&FWDATA) & 0x00FF;//存储写寄存器的低8位;
  11.   dmaConfig0.VLEN      = 0; //Variable Length Transfer - 0=Fixed LEN Transfer//采用LEN作为传送长度
  12.   dmaConfig0.LENH      = (length>>8) & 0x00FF; //Number of WORDSZIE in Transfer - Must be Divisible by 4 - NET_ADDR_SIZE=4//存储传送长度高5位
  13.   dmaConfig0.LENL      = length & 0x00FF;//存储长度低8位;
  14.   dmaConfig0.WORDSIZE  = 0; //Size of Each Transfer - 0=8 Bit;每个DMA传送采用8位传送
  15.   dmaConfig0.TMODE     = 0; //Transfer Mode - 1=Block, 0=Single,传送模式为单一模式
  16.   dmaConfig0.TRIG      = 18; //DMA Trigger - 0=Manual Via DMAREQ, 18=Flash;flash触发
  17.   dmaConfig0.SRCINC    = 0; //Source Address Increment - 1=1 Byte//源地址增量模式为1字节/字
  18.   dmaConfig0.DESTINC   = 1; //Destination Address Increment - 0=0 Bytes (Always Write to FWDATA, No Need to Increment)目标地址增量模式0字节/字
  19.   dmaConfig0.IRQMASK   = 0; //Interrupt Mask - 0=Disable Interrupts//禁止通道完成中断产生
  20.   dmaConfig0.M8        = 0; //8th Bit Mode - 0=Use All 8 Bits使用全部8位作为传送长度
  21.   dmaConfig0.PRIORITY  = 2; //Priority - 10(2)=High Priority优先级为DMA优先
  22. //DMA模式写
  23.   while (FCTL & 0x80); //Wait Until DMA Controller is Available - Busy Bit 7//等待写或擦除状态被激活
  24.   
  25.   /********* 存储写入flash页地址 ***********************************************/
  26.   
  27.   FADDRH =(flashadr >> 8) & 0x00FF; //
  28.   FADDRL =(flashadr >> 0) & 0x00FF;  //
  29.   //通道0配置地址
  30.   DMA0CFGH = (((int)&dmaConfig0) >> 8) & 0x00FF; //Pass DmaConfig0
  31.   DMA0CFGL = ((int)&dmaConfig0) & 0x00FF;
  32.    
  33.   
  34.   DMAARM |= 0x01; //Arm the DMA Channel//通道0进去工作状态
  35.   FCTL |= 0x02; //Start Write
  36.     //while (!(DMAIRQ & 0x01)); //Wait Until Write Complete
  37.     //DMAIRQ &= 0xFE; //Clear Any DMA IRQ on Channel 0 - Bit 0
  38.   while (FCTL & (0x80)); //Wait Until Flash Controller is Not Busy - Busy Bit 7//等待或者擦除状态激活
  39. }
复制代码


此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表