参考论坛上一个帖子用ULINK烧写AM29LV160DB成功

[复制链接]
6445|6
 楼主| 微风 发表于 2007-5-11 22:58 | 显示全部楼层 |阅读模式
发个修改后可用的程序来,请大家指正。<br /><br />使用方法,在keil安装目录中的ARMFLASH目录中新建一个目录,从FLASH目录下的其他目录(如AM29F160DB)中拷贝所有文件到这个新建的目录中,然后修改项目名称。打开项目,将里面的FlashPrg.C和FlashDev.C替换掉,修改项目option中的output的名字和user中的文件名,编译后就可以选择使用AM29LV160DB了。<br />/***********************************************************************/<br />/*&nbsp;&nbsp;This&nbsp;file&nbsp;is&nbsp;part&nbsp;of&nbsp;the&nbsp;ARM&nbsp;Toolchain&nbsp;package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;Copyright&nbsp;KEIL&nbsp;ELEKTRONIK&nbsp;GmbH&nbsp;2003&nbsp;-&nbsp;2004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/***********************************************************************/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;FlashPrg.C:&nbsp;&nbsp;Flash&nbsp;Programming&nbsp;Functions&nbsp;adapted&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;AM29LV160DB&nbsp;(16-bit&nbsp;Bus)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/***********************************************************************/<br /><br />#include&nbsp;&quot;..FlashOS.H&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;FlashOS&nbsp;Structures<br /><br />#define&nbsp;M8(adr)&nbsp;&nbsp;(*((volatile&nbsp;unsigned&nbsp;char&nbsp;&nbsp;*)&nbsp;(adr)))<br />#define&nbsp;M16(adr)&nbsp;(*((volatile&nbsp;unsigned&nbsp;short&nbsp;*)&nbsp;(adr)))<br />#define&nbsp;M32(adr)&nbsp;(*((volatile&nbsp;unsigned&nbsp;long&nbsp;&nbsp;*)&nbsp;(adr)))<br /><br />#define&nbsp;STACK_SIZE&nbsp;&nbsp;&nbsp;64&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Stack&nbsp;Size<br /><br /><br />union&nbsp;fsreg&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Flash&nbsp;Status&nbsp;Register<br />&nbsp;&nbsp;struct&nbsp;b&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q0:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q1:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q2:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q3:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q4:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q5:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q6:1;<br />&nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q7:1;<br />&nbsp;&nbsp;}&nbsp;b;<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;v;<br />}&nbsp;fsr;<br /><br />unsigned&nbsp;long&nbsp;base_adr;<br /><br /><br />/*<br />*&nbsp;Check&nbsp;if&nbsp;Program/Erase&nbsp;completed<br />*&nbsp;&nbsp;&nbsp;&nbsp;Parameter:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adr:&nbsp;&nbsp;Block&nbsp;Start&nbsp;Address<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />/*int&nbsp;Polling&nbsp;(unsigned&nbsp;long&nbsp;adr)&nbsp;{<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q6;<br /><br />&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;q6&nbsp;=&nbsp;fsr.b.q6;<br />&nbsp;&nbsp;do&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(fsr.b.q6&nbsp;==&nbsp;q6)&nbsp;return&nbsp;(0);&nbsp;&nbsp;//&nbsp;Done<br />&nbsp;&nbsp;&nbsp;&nbsp;q6&nbsp;=&nbsp;fsr.b.q6;<br />&nbsp;&nbsp;}&nbsp;while&nbsp;(fsr.b.q5&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Check&nbsp;for&nbsp;Timeout<br />&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;q6&nbsp;=&nbsp;fsr.b.q6;<br />&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;if&nbsp;(fsr.b.q6&nbsp;==&nbsp;q6)&nbsp;return&nbsp;(0);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Done<br />&nbsp;&nbsp;M16(adr)&nbsp;=&nbsp;0xF0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Reset&nbsp;Device<br />&nbsp;&nbsp;return&nbsp;(1);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Failed<br />}&nbsp;*/<br />int&nbsp;Polling&nbsp;(unsigned&nbsp;long&nbsp;adr)&nbsp;{<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;q6;<br /><br />&nbsp;&nbsp;//&nbsp;Check&nbsp;Toggle&nbsp;Bit<br />&nbsp;&nbsp;do&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;&nbsp;&nbsp;q6&nbsp;=&nbsp;fsr.b.q6;<br />&nbsp;&nbsp;&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;}&nbsp;while&nbsp;(fsr.b.q6&nbsp;!=&nbsp;q6);<br />&nbsp;&nbsp;return&nbsp;(0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Done<br />}<br /><br /><br />/*<br />*&nbsp;&nbsp;Initialize&nbsp;Flash&nbsp;Programming&nbsp;Functions<br />*&nbsp;&nbsp;&nbsp;&nbsp;Parameter:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adr:&nbsp;&nbsp;Device&nbsp;Base&nbsp;Address<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clk:&nbsp;&nbsp;Clock&nbsp;Frequency&nbsp;(Hz)<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />int&nbsp;Init&nbsp;(unsigned&nbsp;long&nbsp;adr,&nbsp;unsigned&nbsp;long&nbsp;clk,unsigned&nbsp;long&nbsp;fnc)&nbsp;&nbsp;{<br />&nbsp;&nbsp;base_adr&nbsp;=&nbsp;adr;<br />&nbsp;&nbsp;return&nbsp;(0);<br />}<br /><br /><br />/*<br />*&nbsp;&nbsp;De-Initialize&nbsp;Flash&nbsp;Programming&nbsp;Functions<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />int&nbsp;UnInit&nbsp;(unsigned&nbsp;long&nbsp;fnc)&nbsp;{<br />&nbsp;&nbsp;return&nbsp;(0);<br />}<br /><br /><br />/*<br />*&nbsp;&nbsp;Erase&nbsp;complete&nbsp;Flash&nbsp;Memory&nbsp;<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />int&nbsp;EraseChip&nbsp;(void)&nbsp;{<br /><br />&nbsp;&nbsp;//&nbsp;Start&nbsp;Chip&nbsp;Erase&nbsp;Command<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x2AA&lt&lt1))&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x2AA&lt&lt1))&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0x10;<br /><br />&nbsp;&nbsp;return&nbsp;(Polling(base_adr));&nbsp;&nbsp;//&nbsp;Wait&nbsp;until&nbsp;Erase&nbsp;completed<br />}<br /><br /><br />/*<br />*&nbsp;&nbsp;Erase&nbsp;Sector&nbsp;in&nbsp;Flash&nbsp;Memory<br />*&nbsp;&nbsp;&nbsp;&nbsp;Parameter:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adr:&nbsp;&nbsp;Sector&nbsp;Address<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />int&nbsp;EraseSector&nbsp;(unsigned&nbsp;long&nbsp;adr)&nbsp;{<br /><br />&nbsp;&nbsp;//&nbsp;Start&nbsp;Erase&nbsp;Sector&nbsp;Command<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x2AA&lt&lt1))&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x2AA&lt&lt1))&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;M16(adr)&nbsp;=&nbsp;0x30;<br /><br />&nbsp;&nbsp;do&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;fsr.v&nbsp;=&nbsp;M16(adr);<br />&nbsp;&nbsp;}&nbsp;while&nbsp;(fsr.b.q3&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;for&nbsp;Sector&nbsp;Erase&nbsp;Timeout<br /><br />&nbsp;&nbsp;return&nbsp;(Polling(adr));&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Wait&nbsp;until&nbsp;Erase&nbsp;completed<br />}<br /><br /><br />/*<br />*&nbsp;&nbsp;Program&nbsp;Page&nbsp;in&nbsp;Flash&nbsp;Memory<br />*&nbsp;&nbsp;&nbsp;&nbsp;Parameter:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;adr:&nbsp;&nbsp;Page&nbsp;Start&nbsp;Address<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sz:&nbsp;&nbsp;&nbsp;Page&nbsp;Size<br />*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf:&nbsp;&nbsp;Page&nbsp;Data<br />*&nbsp;&nbsp;&nbsp;&nbsp;Return&nbsp;Value:&nbsp;&nbsp;&nbsp;0&nbsp;-&nbsp;OK,&nbsp;&nbsp;1&nbsp;-&nbsp;Failed<br />*/<br /><br />int&nbsp;ProgramPage&nbsp;(unsigned&nbsp;long&nbsp;adr,&nbsp;unsigned&nbsp;long&nbsp;sz,&nbsp;unsigned&nbsp;char&nbsp;*buf)&nbsp;{<br />&nbsp;&nbsp;int&nbsp;i;<br /><br />&nbsp;&nbsp;for&nbsp;(i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt&nbsp;((sz+1)/2);&nbsp;i++)&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Start&nbsp;Program&nbsp;Command<br />&nbsp;&nbsp;&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xAA;<br />&nbsp;&nbsp;&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x2AA&lt&lt1))&nbsp;=&nbsp;0x55;<br />&nbsp;&nbsp;&nbsp;&nbsp;M16(base_adr&nbsp;+&nbsp;(0x555&lt&lt1))&nbsp;=&nbsp;0xA0;<br />&nbsp;&nbsp;&nbsp;&nbsp;M16(adr)&nbsp;=&nbsp;*((unsigned&nbsp;short&nbsp;*)&nbsp;buf);<br />&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(Polling(adr)&nbsp;!=&nbsp;0)&nbsp;return&nbsp;(1);<br />&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;+=&nbsp;2;<br />&nbsp;&nbsp;&nbsp;&nbsp;adr&nbsp;+=&nbsp;2;<br />&nbsp;&nbsp;}<br />&nbsp;&nbsp;return&nbsp;(0);<br />}<br /><br /><br />/***********************************************************************/<br />/*&nbsp;&nbsp;This&nbsp;file&nbsp;is&nbsp;part&nbsp;of&nbsp;the&nbsp;ARM&nbsp;Toolchain&nbsp;package&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;Copyright&nbsp;KEIL&nbsp;ELEKTRONIK&nbsp;GmbH&nbsp;2003&nbsp;-&nbsp;2004&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/***********************************************************************/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;FlashDev.C:&nbsp;&nbsp;Device&nbsp;Description&nbsp;for&nbsp;AM29LV160DB&nbsp;(16-bit&nbsp;Bus)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/<br />/***********************************************************************/<br /><br />#include&nbsp;&quot;..FlashOS.H&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;FlashOS&nbsp;Structures<br /><br /><br />struct&nbsp;FlashDevice&nbsp;const&nbsp;FlashDevice&nbsp;&nbsp;=&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;FLASH_DRV_VERS,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Driver&nbsp;Version,&nbsp;do&nbsp;not&nbsp;modify!<br />&nbsp;&nbsp;&nbsp;&quot;AM29LV160DB&nbsp;Flash&quot;,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;Name<br />&nbsp;&nbsp;&nbsp;EXT16BIT,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;Type<br />&nbsp;&nbsp;&nbsp;0x000000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;Start&nbsp;Address<br />&nbsp;&nbsp;&nbsp;0x200000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Device&nbsp;Size&nbsp;in&nbsp;Bytes&nbsp;(2MB)<br />&nbsp;&nbsp;&nbsp;1024,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Programming&nbsp;Page&nbsp;Size<br />&nbsp;&nbsp;&nbsp;0,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Reserved,&nbsp;must&nbsp;be&nbsp;0<br />&nbsp;&nbsp;&nbsp;0xFF,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Initial&nbsp;Content&nbsp;of&nbsp;Erased&nbsp;Memory<br />&nbsp;&nbsp;&nbsp;100,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Program&nbsp;Page&nbsp;Timeout&nbsp;100&nbsp;mSec<br />&nbsp;&nbsp;&nbsp;3000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Erase&nbsp;Sector&nbsp;Timeout&nbsp;3000&nbsp;mSec<br /><br />//&nbsp;Specify&nbsp;Size&nbsp;and&nbsp;Address&nbsp;of&nbsp;Sectors<br />&nbsp;&nbsp;&nbsp;0x10000,&nbsp;0x000000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;Size&nbsp;64kB&nbsp;(31&nbsp;Sectors)<br />&nbsp;&nbsp;&nbsp;0x08000,&nbsp;0x1F0000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;Size&nbsp;32kB&nbsp;(1&nbsp;Sector)<br />&nbsp;&nbsp;&nbsp;0x02000,&nbsp;0x1F8000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;Size&nbsp;&nbsp;8kB&nbsp;(2&nbsp;Sectors)<br />&nbsp;&nbsp;&nbsp;0x04000,&nbsp;0x1FC000,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Sector&nbsp;Size&nbsp;16kB&nbsp;(1&nbsp;Sector)<br />&nbsp;&nbsp;&nbsp;SECTOR_END<br />};<br />
computer00 发表于 2007-5-11 23:15 | 显示全部楼层

keil不是本来就可以通过Ulink烧29LV160DB吗?

我没有搞什么程序,直接选择一个FLASH型号就可以烧了。然后我在我自己的程序里,<br />写了一个IAP&nbsp;29LV160DB的,先要把自己复制到RAM,然后再对FLASH编程,这样就可以通过<br />网口或者串口烧录程序了。<br /><br />我是拿网上下载的44B0&nbsp;的BIOS修改的,原来的FLASH好象是39LV什么的。<br /><br /><br />参看:<br /><br /><br /><a href="http://computer00.21ic.org/user1/2198/archives/2007/37838.html" target=_blank>http://computer00.21ic.org/user1/2198/archives/2007/37838.html</a><br /><br /><br /><a href="https://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2496814&tp=%u5F7B%u5E95%u5012%u584C%u4E86%7E%7E%7Ekeil%u7684CARM%u7F16%u8BD1%u5668%u597D%u8C61%u4E0D%u80FD%u8BBE%u7F6E%u751F%u6210%u76F8%u5BF9%u8DF3%u8F6C%u4EE3%u7801%uFF1F" target=_blank>https://bbs.21ic.com/club/bbs/list.asp?boardid=35&t=2496814&tp=%u5F7B%u5E95%u5012%u584C%u4E86%7E%7E%7Ekeil%u7684CARM%u7F16%u8BD1%u5668%u597D%u8C61%u4E0D%u80FD%u8BBE%u7F6E%u751F%u6210%u76F8%u5BF9%u8DF3%u8F6C%u4EE3%u7801%uFF1F</a>
 楼主| 微风 发表于 2007-5-11 23:22 | 显示全部楼层

不知道为什么,我这里选别的型号会出错

搞不明白
kyoko 发表于 2010-8-19 10:29 | 显示全部楼层
楼主,我按你的方法进行编译,采用MDK V4.10,但是出现如下错误,编译不成功。能否给个编译后的文件包,谢谢

compiling FlashDev.c...
linking...
AM29LV160DB.axf: Error: L6265E: Non-PI Section flashprg.o(.data) cannot be assigned to PI Exec region PrgData.
AM29LV160DB.axf: Error: L6248E: flashprg.o(.text) in PI region 'PrgCode' cannot have address type relocation to .data in PI region 'PrgData'.
AM29LV160DB.axf: Error: L6285E: Non-relocatable Load region PRG contains R-Type dynamic relocations. First R-Type dynamic relocation found in flashprg.o(.text) at offset 0x194.
AM29LV160DB.axf: Finished: 0 information, 0 warning and 3 error messages.
Target not created

就算是直接打开自带的AM29F160DB项目文件进行编译,也出现相同的错误
fangang0313 发表于 2010-12-31 21:47 | 显示全部楼层
我也碰到相同的问题。。不知道为什么呢?
ha0xiang 发表于 2010-12-31 21:52 | 显示全部楼层
搞不明白
fangang0313 发表于 2010-12-31 22:35 | 显示全部楼层
原因我找到了。。Target.lin 文件里 加上 ABSOLUTE 就 OK 了 像这样
PRG 0 PI               ; Programming Functions
{
  PrgCode +0           ; Code
  {
    * (+RO)
  }
  PrgData +0  ABSOLUTE         ; Data
  {
    * (+RW,+ZI)
  }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

31

主题

681

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部