|
这一期给大家带来的是Flash的数据写入与读出。在ADuCM360芯片中对闪存提供了三种保护类型,分别是密钥保护、读保护和写保护。可以根据数据手册了解相关寄存器的作用。
数据手册中的内容这里就不多做介绍了,大家可以自行去看。接下来就开始介绍编程方面的内容了。首先把要写入Flash页中的数据定义一下,这里简单写一个数组。
unsigned long data[5] = {1,2,3,4,5};等一下要做的就是把上面的数组写入,然后让LED闪烁以证明数据被写入。先把初始化函数甩出来。void Flash_Init(){ WdtCfg(T3CON_PRE_DIV1,T3CON_IRQ_EN,T3CON_PD_DIS); DioOen(pADI_GP1,0x08); DioSet(pADI_GP1, BIT3); ClkDis(CLKDIS_DISSPI0CLK|CLKDIS_DISSPI1CLK|CLKDIS_DISI2CCLK|CLKDIS_DISUARTCLK|CLKDIS_DISPWMCLK|CLKDIS_DIST0CLK|CLKDIS_DIST1CLK|CLKDIS_DISDACCLK|CLKDIS_DISDMACLK|CLKDIS_DISADCCLK); ClkCfg(CLK_CD0,CLK_HF,CLKSYSDIV_DIV2EN_DIS,CLK_UCLKCG); EiCfg(EXTINT1, INT_EN, INT_FALL); NVIC_EnableIRQ(EINT1_IRQn); FeePErs(0x000ff); WriteToFlash(data, 0x000ff, sizeof(data)); ReadFromFlash(checkData, 0x000ff, sizeof(checkData)); for (i=0; i<(sizeof(checkData)/sizeof(checkData[0])); i++) { if (checkData != data) break; } if (i == ( sizeof(checkData)/sizeof(checkData[0]) )) { DioClr(pADI_GP1, BIT3); } do uiFEESTA = FeeSta(); while((uiFEESTA & FEESTA_CMDBUSY) == FEESTA_CMDBUSY); FeeWrEn(1); FeeFAKey(0x1111111111111111); FeeWrEn(0); }接下来就给大家简单介绍一下这个初始化函数。前几行还是老样子,我在之前的经验中已经说个多次,所以这里就不在重复了,有需要的童鞋可以去翻看我之前的经验。之后的一行代码是配置外部中断1,也就是P0.5引脚,然后使能外部中断1。接下来的函数就是擦除指定页面的地址,这里指定的是0x000ff这一页。页码范围是0-0x1FFFF。然后将数据写入指定的页面中,下一行是读取指定页面的内容。然后判断并决定LED是否熄灭。之后返回Flash控制器的状态寄存器,之后等待。最后几行的意思是允许写入Flash,下一行是写入校验密码,根据数据手册是16位。然后关闭,禁止写入Flash。这一期先介绍初始化函数,下一期介绍其他子函数。 |
|