tms320c6000价格_tms320c6000_tm320c6000网盘(5)

电脑杂谈  发布时间:2017-02-24 08:23:17  来源:网络整理

好了,给大家看看保存后的boot.dat文件,

除了第一行,每行都是一个4字节长度的数。下面要做得是,分别把boot.dat中这些数和text.dat中的这些数放到boot[]和text[]的数组中,并将数组保存在头文件中。

首先删除头行

vim命令添加逗号:%s/$/,/g

添加数组名

搞定后的结果,如boot.h文件和text.h文件如下:

好了,到这就差不多了,表示机器码的二进制如今保存在我们的C语言头文件中了,下面就是要把头文件数组中的机器码烧写到Flash的对应的地址空间。

4 烧写Flash

本文操作环境下使用的Flash型号是AM29LV800BT。

为了烧写,首先你要做的是重新新建一个用于Flash烧写的工程。

烧写Flash的程序网上也有很多讲解,今天把烧写Flash调了出来,就当给大家福利,把我的Flash驱动程序给出来,

/*
 * FileName : FLASH.h
 * Author   : xiahouzuoxin
 * Date     : 2013.09.28
 * Version  : v1.0
 * Brief    :  
 */
#ifndef _FLASH_H
#define _FLASH_H

#include "Config.h"

#define     FLASH_UL1           0xAA
#define     FLASH_UL2           0x55
#define     FLASH_UL3           0x80
#define     FLASH_UL4           0xAA
#define     FLASH_UL5           0x55
#define     FLASH_SECTOR_UL6    0x30
#define     FLASH_CHIP_UL6      0x10
#define     FLASH_PROGRAM       0xA0
#define     SECTOR_SIZE         0x0800
#define     BLOCK_SIZE          0x8000
#define     CHIP_SIZE           0x40000

#define     FLASH_FIRST_ADDR    0x90000000
#define     FLASH_OFFSET(addr)  (FLASH_FIRST_ADDR&#43;(addr)<<1)  // 16 bit boot mode


/* External functions propotype */
extern uint32_t Flash_Erase(uint32_t addr,uint16_t type);
extern void Flash_Readm(uint32_t addr,uint16_t *ptr,uint32_t length);
extern uint32_t Flash_Reads(uint32_t addr);
extern void Flash_Writem(uint32_t addr,uint16_t *ptr,uint32_t length);
extern void Flash_Writes(uint32_t addr,uint16_t data);

#endif
/*
 * FileName : FLASH.c
 * Author   : xiahouzuoxin
 * Date     : 2013.09.28
 * Version  : v1.0
 * Brief    :  
 */
#include "FLASH.h"
#include "stdio.h"

/* Global vaiables */
volatile uint16_t *FLASH_5555 = (volatile uint16_t *) (0x90000000&#43;(0x5555<<1));
volatile uint16_t *FLASH_2AAA = (volatile uint16_t *) (0x90000000&#43;(0x2AAA<<1));

/* 
 * @brief  Flash erase function.
 * @param  addr: 
 *         type:
 * @retval 
 */   
uint32_t Flash_Erase(uint32_t addr, uint16_t type)
{
    uint32_t i,j;

    *FLASH_5555 = FLASH_UL1;    //first
    *FLASH_2AAA = FLASH_UL2;    //second
    *FLASH_5555 = FLASH_UL3;    //third
    *FLASH_5555 = FLASH_UL4;
    *FLASH_2AAA = FLASH_UL5;

    switch(type)
    {
        case 0x50:      //block erase
            *(uint16_t *)addr = type;
            while((*(uint16_t *)addr & 0x80) != 0x80);
            for(i = 0; i < BLOCK_SIZE; i&#43;&#43;)
            {
                if(*(uint16_t *)(addr &#43; i) != 0xffff)
                {
                    j = 0;
                    break;
                }
            }
            j = 1;
            break;

        case 0x30:      //sector erase
            *(uint16_t *)addr = type;
            while((*(uint16_t *)addr & 0x80) != 0x80);
            break;

        case 0x10:      //chip erase
            *FLASH_5555 = type;
            while((*FLASH_5555 & 0x80) != 0x80);
            break;

        default:
            break;
    }
    return (j);
}

/* 
 * @brief  Write a single data.
 * @param  addr: 
 *         data:
 * @retval 
 */   
void Flash_Writes(uint32_t addr,uint16_t data)
{
    uint32_t j = 0;

    *FLASH_5555 = FLASH_UL1;
    *FLASH_2AAA = FLASH_UL2;
    *FLASH_5555 = FLASH_PROGRAM;

    *(uint16_t *)addr = data;

    j = 0;
    while (j<255) j&#43;&#43;;  // with delay

    while(*(uint16_t *)addr != data);  // 校验
}

/* 
 * @brief  Write the certain length data.
 * @param  addr: 
 *         ptr:
 *         length:
 * @retval 
 */ 
void Flash_Writem(uint32_t addr,uint16_t *ptr,uint32_t length)
{
    uint32_t i;

    for(i  = 0; i < length; i&#43;&#43;)
    {
        Flash_Writes(addr&#43;(i<<1),*(ptr&#43;i));

        if (i % 0xFF == 0) {  
            printf("\nWrite %d bytes...", i<<1);
        }
    }
}

/* 
 * @brief  Read a single data.
 * @param  addr: 
 * @retval 
 */
uint32_t Flash_Reads(uint32_t addr)
{
    return (*(uint16_t *)addr);
}

/* 
 * @brief  Read the certain length data.
 * @param  addr: 
 *         ptr:
 *         length:
 * @retval 
 */
void Flash_Readm(uint32_t addr,uint16_t *ptr,uint32_t length)
{
    uint32_t i;
    for(i = 0; i < length; i&#43;&#43;)
    {
        *(ptr &#43; i) = Flash_Reads(addr&#43;2*i);
    }
}


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/ruanjian/article-34190-5.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...