#include <ioCC2533.h>
#include "mcu_io.h"
#include "flash.h"
#include <string.h>
typedef unsigned char uint8;
typedef struct
{
unsigned char SRCADDRH; //源地址高8位
unsigned char SRCADDRL; //源地址低8位
unsigned char DESTADDRH; //目的地址高8位
unsigned char DESTADDRL; //目的地址低8位
unsigned char VLEN :3; //长度域模式选择
unsigned char LENH :5; //传输长度高字节
unsigned char LENL :8; //传输长度低字节
unsigned char WORDSIZE :1; //字节(byte)或字(word)传输
unsigned char TMODE :2; //传输模式选择
unsigned char TRIG :5; //触发事件选择
unsigned char SRCINC :2; //源地址增量:-1/0/1/2
unsigned char DESTINC :2; //目的地址增量:-1/0/1/2
unsigned char IRQMASK :1; //中断屏蔽
unsigned char M8 :1; //7或8bit传输长度,仅在字节传输模式下适用
unsigned char PRIORITY :2; //优先级
}DMA_CFG;
void sys_clk_init(void)
{
CLKCONCMD = ~0x47;
}
void delay(unsigned int ts)
{
unsigned int t;
for(t=0;t<ts;t++);
for(t=0;t<ts;t++);
for(t=0;t<ts;t++);
for(t=0;t<ts;t++);
}
void Flash_read(unsigned char pg, \
unsigned char offset,\
unsigned char* str, \
unsigned int n) \
{
unsigned char *addr;
unsigned char save;
pg /= 32;
save = MEMCTR;
MEMCTR = (MEMCTR & 0xF8)|pg;
addr = (unsigned char*)0x8000+offset+(pg%32)*1024;
while(n--)
{
*str++ = *addr++;
}
MEMCTR = save;
}
#define debug
void main(void)
{
unsigned char str[10] = {0};
DMA_CFG dmaConfig; //定义配置结构体
unsigned char sourceString[]="chinaymj learn cc2533 RF mcu"; //源字符串
MEMCTR = (MEMCTR & 0xF8)|0;//flash 低32kb映射到xdata 0x8000后的空间
sys_clk_init();
P1_1 = 0;
P1DIR = 0xff;
#define flash
#ifdef flash
#ifdef debug
FADDRH = 0;
FCTL |= 0x01;//清空32页的1Kb空间
//配置DMA结构体
#endif
dmaConfig.SRCADDRH=(unsigned char)((unsigned int)&sourceString >> 8); //源地址
dmaConfig.SRCADDRL=(unsigned char)((unsigned int)&sourceString);
dmaConfig.DESTADDRH=(unsigned char)((unsigned int)&FWDATA >> 8); //目的地址
dmaConfig.DESTADDRL=(unsigned char)((unsigned int)&FWDATA);
dmaConfig.VLEN=0x00; //选择LEN作为传送长度
dmaConfig.LENH=(unsigned char)((unsigned int)sizeof(sourceString) >> 8); //传输长度
dmaConfig.LENL=(unsigned char)((unsigned int)sizeof(sourceString));
dmaConfig.WORDSIZE=0x00; //选择字节(byte)传送
dmaConfig.TMODE=0x00; //single
dmaConfig.TRIG=18; //flash
dmaConfig.SRCINC=0x01; //源地址增量为1
dmaConfig.DESTINC=0x00; //目的地址增量为0
dmaConfig.IRQMASK=0; //DMA中断屏蔽
dmaConfig.M8=0x00; //选择8位长的字节来传送数据
dmaConfig.PRIORITY=0x02; //传输优先级为高
DMA0CFGH=(unsigned char)((unsigned int)&dmaConfig >> 8); //将配置结构体的首地址赋予相关SFR
DMA0CFGL=(unsigned char)((unsigned int)&dmaConfig);
DMAARM=0x01; //启用配置 进入工作状态
DMAIRQ=0x00; //清中断标志位
DMAREQ=0x01; //启动DMA传输
FADDRL = 0;//设置flash页面地址
FADDRH = 1;
FCTL |= 0x02; // Trigger the DMA writes.
while (FCTL & 0x80); // Wait until writing is done.
while(!(DMAIRQ&0x01)); //等待传输结束
// MEMCTR = (MEMCTR & 0xF8)|1;
Flash_read(1,0,str,10);
if(str[0] == 'c')
LED_ON;
else
LED_OFF;
#endif
// MEMCTR &= ~(1<<3);// ram
}
我实在是没的办法了,没的效果啊!