智能车制作

标题: 写了一夜,把冷火的flash在线编程给开发出来了 [打印本页]

作者: 金刀丸    时间: 2014-6-5 02:03
标题: 写了一夜,把冷火的flash在线编程给开发出来了
从此,调参数再也不用一遍一遍下程序了,二楼上代码
作者: 金刀丸    时间: 2014-6-5 02:03
#ifndef FLASH_H_
#define FLASH_H_
#include "support_common.h"
#define FLASH_PAGESIZE 4096
#define FLASH_PROG_OFFSET 0x44000000//地址偏移量

#define FLASH_PROGRAM 0x20  //写入命令
#define FLASH_PAGE_ERASE 0x40//页擦除命令

void FlashPageErase(uint8 page);//擦除指定的页
void FlashPageWrite(uint8 page,uint16 pstart,uint32 N);//写flash
uint32  FlashRead(uint8 page,uint16 pstart);//读flash

#endif
作者: 金刀丸    时间: 2014-6-5 02:04
#include"flash.h"
void FlashPageErase(uint8 page)//page为要擦除的页(0=<page<=127),选第127页
{
        uint32*address;
        uint8 sector;
        address=(uint32*)(page*FLASH_PAGESIZE+FLASH_PROG_OFFSET);//1.算出页首地址
        sector=page/4;//对应的扇区
       
        MCF_CFM_CFMPROT&=~MCF_CFM_CFMPROT_PROTECT(sector);//2.解除对页所在扇区的保护
       
        MCF_CFM_CFMCLKD=MCF_CFM_CFMCLKD_DIV(30)
                       |MCF_CFM_CFMCLKD_PRDIV8;//3,设置flash的工作频率为161.3khz
                      
        while(!(MCF_CFM_CFMUSTAT&MCF_CFM_CFMUSTAT_CBEIF));//4等待命令缓冲区空
       
           MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_PVIOL;//清侵害保护标志位
        MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_ACCERR;//清访问出错标志位
         
    *address=0x0;//5向擦除页内任意地址写任意值,以定位要擦除的的页
   
    MCF_CFM_CFMCMD=MCF_CFM_CFMCMD_CMD(FLASH_PAGE_ERASE);//6页擦除命令
    MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_CBEIF;//7,启动命令执行
   
    while(!(MCF_CFM_CFMUSTAT&MCF_CFM_CFMUSTAT_CCIF));//8等待命令执行完成
                      
}
void FlashPageWrite(uint8 page,uint16 pstart,uint32 N)//page是页号,pstart是该页中的字号(0=<page<=127),(0=<pstart<=1023)
{
        uint32*address;
        uint8 sector;
        address=(uint32*)(page*FLASH_PAGESIZE+pstart*4+FLASH_PROG_OFFSET);//1.算出字首地址
        sector=page/4;//对应的扇区
       
        MCF_CFM_CFMPROT&=~MCF_CFM_CFMPROT_PROTECT(sector);//2.解除对页所在扇区的保护
       
    MCF_CFM_CFMCLKD=MCF_CFM_CFMCLKD_DIV(30)
                       |MCF_CFM_CFMCLKD_PRDIV8;//3,设置flash的工作频率为161.3khz
                      
    while(!(MCF_CFM_CFMUSTAT&MCF_CFM_CFMUSTAT_CBEIF));//4等待命令缓冲区空
   
        MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_PVIOL;//清侵害保护标志位
        MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_ACCERR;//清访问出错标志位
       
        *address=N;//5写入数据
       
        MCF_CFM_CFMCMD=MCF_CFM_CFMCMD_CMD(FLASH_PROGRAM);//6写入命令
        MCF_CFM_CFMUSTAT|=MCF_CFM_CFMUSTAT_CBEIF;//7,启动命令执行
       
    while(!(MCF_CFM_CFMUSTAT&MCF_CFM_CFMUSTAT_CCIF));//8等待命令执行完成
   
    MCF_CFM_CFMPROT|=MCF_CFM_CFMPROT_PROTECT(sector);//9.给所在页加保护
       
       
}
uint32  FlashRead(uint8 page,uint16 pstart)//page是页号,pstart是该页中的字号
{
        uint32*address;
        uint32 n;
        address=(uint32*)(page*FLASH_PAGESIZE+pstart*4);//1.算出字首地址
        n=*address;
        return n;
}
作者: allenanswerzq    时间: 2014-6-5 02:42
不是很懂啊,大神解释解释,将改好的参数存到Flash中码
作者: 金刀丸    时间: 2014-6-5 09:02
allenanswerzq 发表于 2014-6-5 02:42
不是很懂啊,大神解释解释,将改好的参数存到Flash中码

其实我不是大神啦,就是通过按键改参数时,参数存到flash里,掉电后不丢失
作者: dingyongbin    时间: 2014-6-5 09:21
good
作者: 原来地球还在转    时间: 2014-6-5 09:39
给力!
作者: 超级马力    时间: 2014-6-5 13:09
我擦的是第255页
作者: 超级马力    时间: 2014-6-5 13:11
我的一页是2k。
作者: caibolin    时间: 2014-6-5 13:44
大神给力~
作者: 竹音清影    时间: 2014-6-5 13:52
good men
作者: 金刀丸    时间: 2014-6-5 14:26
超级马力 发表于 2014-6-5 13:11
我的一页是2k。

k60?
作者: 超级马力    时间: 2014-6-5 19:04
金刀丸 发表于 2014-6-5 14:26
k60?

我记得冷火就是2K一页,然后我每次擦最后一页。

作者: 金刀丸    时间: 2014-6-6 12:13
超级马力 发表于 2014-6-5 19:04
我记得冷火就是2K一页,然后我每次擦最后一页。

好吧,我是按4k一页擦的,也没出啥问题
作者: 1249844726    时间: 2014-6-6 12:14
表示很久前就用了。
作者: 1249844726    时间: 2014-6-6 12:18
你还是挺给力的。不过用冷火的人不是很多。而且到现在没被坑死的人更不多。用到Flash的就更更不多了。
作者: 金刀丸    时间: 2014-6-6 20:18
1249844726 发表于 2014-6-6 12:18
你还是挺给力的。不过用冷火的人不是很多。而且到现在没被坑死的人更不多。用到Flash的就更更不多了。

谢谢大神,现在车速怎么样了

作者: 喃风    时间: 2014-7-14 20:26
楼主这个程序是基于40M主频?




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2