原创 vsprog里的通用熔丝位配置方式 -- AVR示例

2009-11-18 03:38 2789 5 5 分类: MCU/ 嵌入式
vsprog里,熔丝位、锁定位、甚至校准位数据都是用同样的方式配置,现以AVR的ATMega128作为示例,说明一下增加一块芯片的方法。

1.通用设置:
vsprog里,一个芯片系列的设置(比如avr8.xml)中的数据都是放在<series name="avr8"></series>之间。而单个型号的芯片的数据则是放在<chip name="atmega128"></chip>之间。通用设置包括芯片的编程模式(program_mode)、芯片ID(chip_id)、应用程序页大小(app_page_size)、应用程序页数量(app_page_num)、EE页大小(ee_page_size)、EE页数量(ee_page_num)、以及各种参数(对于不同芯片的意义不同,比如param0对于AVR8表示JTAG是否可以连续输入一页数据)。
    <program_mode>ijp</program_mode>
    <chip_id>0x001E9702</chip_id>
    <app_page_size>256</app_page_size>
    <app_page_num>512</app_page_num>
    <ee_page_size>8</ee_page_size>
    <ee_page_num>512</ee_page_num>
    <param0>1</param0>

2.熔丝位、锁定位、校准位的设置方法
分别位于<fuse></fuse>、<lock></lock>和<calibration></calibration>之间。都针对于一个最长32位的数据,并且分成多个设置(<setting></setting>定义设置),每个设置可有多个选项(<choice></choice>之间)。下面来一个一个说明(以fuse为例子)。
fuse的属性有init和bytesize,init是初始值(和总的mask值一样),bytesize是字节大小,最大为4(mega128里,熔丝位是3字节数据):
    <fuse init="0xFFFFFF" bytesize="3">

之后定义一些警告信息(<warning></warning>之间、每个警告信息在<w></w>之间):
      <warning>
        <w mask="0x004000" value="0x004000" msg="WARNING! These fuse settings will disable the JTAG interface!" />
        <w mask="0x002000" value="0x002000" msg="WARNING! These fuse settings will disable the ISP interface!" />
      </warning>
警告信息有mask、value、msg 3个属性,当实际数据和mask求于后的值等于value时,会显示警告信息。<warning>和<setting>是同一层次的数据,只是<warning>要定义在<setting>前,并且只能有一个<warning>(可以具有多个<w>)。按下OK后,会进行警告的检测,如果符合警告的设置,则会显示:
959c402c-2509-41b6-98a9-19e2fadbc7df.jpg

设置信息:
      <setting name="M103C" mask="0x020000" info="ATmega103 Compatibility Mode" checked="0" />
      <setting name="WDTON" mask="0x010000" info="Watchdog Timer always on" checked="0" />
设置信息一定要定义name、mask,用于指定设置的名字和mask,info可选,用于指定提示信息。以上这种是check类型的设置,可以有checked和unchecked属性,用于定于勾选和非勾选状态下的数值,如果只定义一个的话,程序会自动根据这个数据和mask求异或得到另一个。GUI中,如下显示:
d42ac49f-bda8-4358-83d9-1e60e5eb0f30.jpg

      <setting name="BOOTSZ" mask="0x000600" info="Select Boot Size">
        <choice value="0x000600" text="Boot Flash size="512" words start address=$FE00" />
        <choice value="0x000400" text="Boot Flash size="1024" words start address=$FC00" />
        <choice value="0x000200" text="Boot Flash size="2048" words start address=$F800" />
        <choice value="0x000000" text="Boot Flash size="4096" words start address=$F000" />
      </setting>
以上这个设置,定义了几个选项,系统会自动使用combobox来显示,每个选项只需要定义value和text属性,表示选中该选项时候对应的数值和显示的内容。
3014fa23-cc3b-4d2d-afa8-b9798b7a5712.jpg

      <setting name="EXTENDED" mask="0xFF0000" info="EXTENDED" radix="16" shift="16" bytelen="1" />
      <setting name="HIGH" mask="0x00FF00" info="HIGH" radix="16" shift="8" bytelen="1" />
      <setting name="LOW" mask="0x0000FF" info="LOW" radix="16" shift="0" bytelen="1" />
以上选项指定了radix和shift,表示进制和数据偏移,系统会使用Edit组件来表示。由于以上定义其实和之前的某些定义在位上有冲突,系统会自动空开一行显示:
2dea96e6-353e-44b0-9b46-d07b3d5a9856.jpg

另外,setting还可以有一个ban属性,用于禁用在某个program_mode下的使能,比如:
      <setting name="SPIEN" mask="0x002000" ban="i" info="Serial program downloading (SPI) enabled" checked="0" />
a1a68285-5ea1-4aab-9e38-7e00ea2596f3.jpg
ban="i"表示在i模式下(ISP),ISP使能位是不可写的。
      <setting name="1.0 MHz" mask="0x000000FF" info="OSCCAL at 1.0 MHz" ban="*" radix="16" shift="0" />
      <setting name="2.0 MHz" mask="0x0000FF00" info="OSCCAL at 2.0 MHz" ban="*" radix="16" shift="8" />
      <setting name="4.0 MHz" mask="0x00FF0000" info="OSCCAL at 4.0 MHz" ban="*" radix="16" shift="16" />
      <setting name="8.0 MHz" mask="0xFF000000" info="OSCCAL at 8.0 MHz" ban="*" radix="16" shift="24" />
ban="*"表示在所有模式下都不可写,也就是只读属性。
06862e7e-db85-4457-821e-123c76047445.jpg

系统会自动根据xml中的设置,来自动生成界面,开发中的界面是空的。用于可以自己修改属性来得到不同的界面。比如,如果系统上面的校准数据以2进制的方式显示的话,仅仅需要把对应的radix设置为2即可:
c2125f77-cfd9-4db0-af95-dd984c46b8c9.jpg
PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条