实现MAXQ2000微控制器的JTAG加载主机

[09-13 17:04:13]   来源:http://www.88dzw.com  控制技术   阅读:8661

文章摘要:将代码装入程序存储器为演示JTAG启动加载程序的功能,演示应用程序需要通过JTAG连接,把代码装入到从机MAXQ2000中。在这个例子中,装入的代码是一个简单例程,它启动LCD控制器,在LCD显示屏上显示一个4位数。装入MAXQ2000的代码基于下面的简单演示工程。 org 0 ljump mainorg 20hmain: move LCRA, #03E0h ; xxx0001111100000 ; 00 - DUTY : Static

实现MAXQ2000微控制器的JTAG加载主机,标签:计算机控制技术,工厂电气控制技术,http://www.88dzw.com

将代码装入程序存储器

为演示JTAG启动加载程序的功能,演示应用程序需要通过JTAG连接,把代码装入到从机MAXQ2000中。在这个例子中,装入的代码是一个简单例程,它启动LCD控制器,在LCD显示屏上显示一个4位数。

装入MAXQ2000的代码基于下面的简单演示工程。
org 0
   ljump   main

org 20h

main:
   move    LCRA, #03E0h      ; xxx0001111100000
                             ;    00            - DUTY : Static
                             ;      0111        - FRM  : Frame freq
                             ;          1       - LCCS : HFClk / 128
                             ;           1      - LRIG : Ground VADJ
                             ;            00000 - LRA  : RADJ = Min

   move    LCFG, #0F3h       ; 1111xx11
                             ; 1111     - PCF  : All segments enabled
                             ;       1  - OPM  : Normal operation
                             ;        1 - DPE  : Display enabled

   move    LCD0, #LCD_CHAR_0
   move    LCD1, #LCD_CHAR_0
   move    LCD2, #LCD_CHAR_0
   move    LCD3, #LCD_CHAR_2
   move    LCD4, #00h

   sjump   $
然而,由于我们是从演示应用程序中装入代码字节,而不是从硬件编码的十六进制文件中装入(当采用MTK或者MAX-IDE装入代码时会有这种情况),因此,演示应用程序会根据用户输入来修改装入的应用程序。

在装入代码前,JTAG通信演示应用程序首先告诉用户输入一个4位十进制数,然后修改要装入的应用程序,如下所示。
  • LCD上显示的数字是用户输入的4位数。
  • 密码区的前4个字节(从字地址010h开始)被设置为用户输入的4字符ASCII值。
演示应用程序三次调用启动加载程序命令10h (装入代码,可变长度)来装入应用代码。这一命令的参数包括:装入的字节数(当装入代码存储器时必须是偶数,以保证字对齐);启动地址;当然,还有数据本身。MAXQ存储器为little-endian方式,因此,应用程序必须首先发送每一程序字的最低有效字节。
   ;;;;
   ;;;;  First load - LJUMP 0020h at start of program memory
   ;;;;

   move    DP[0], #0
   move    @DP[0],   #CMD_LOAD_CODE_VARIABLE
   move    @++DP[0], #4        ; Length - 4 bytes
   move    @++DP[0], #00h      ; AddrL (byte address 0000h)
   move    @++DP[0], #00h      ; AddrH

   move    @++DP[0], #000h     ; 00 0B 20 0C - ljump 0020h
   move    @++DP[0], #00Bh
   move    @++DP[0], #020h
   move    @++DP[0], #00Ch
   move    @++DP[0], #000h     ; Padding
   move    @++DP[0], #000h     ; Padding
   move    @++DP[0], #55h
   move    LC[1], DP[0]
   move    DP[0], #0

   nop
   call    sendCommand
   nop
   jump    C, main_failJTAG
   call    getStatus
   jump    C, main_failJTAG
   move    Acc, A[3]         ; Check that loader status is 00h (no error)
   jump    NZ, main_failStatus
以同样的方式装入其他两个存储器代码块。

验证程序存储器代码

一旦装入代码后,有几种方法来验证是否正确装入。
  • 没有使用装入代码可变长度命令(10h),而是使用装入和验证代码可变长度命令(50h)。后一命令结合了代码装入操作和验证步骤。
  • 或者,也可以调用验证代码可变长度命令(40h)来单独进行验证。
  • 没有让启动加载程序验证装入的代码,而是使用卸载代码可变长度(20h)命令验证装入的代码是否匹配发送的数据,JTAG主机直接验证装入的数值。

从程序存储器卸载代码

装入所有代码后,JTAG演示的最后一步是读回一个块中的所有代码。向启动加载程序发送卸载代码可变长度(20h)命令来完成这一读操作。这一命令的参数是开始卸载的地址(读),以及卸载的字节数。注意,对于所有的JTAG启动加载程序命令,必须为每一读回的字节发送一个字节。因此,这一命令需要大量的零填充字节,从程序存储器读取每一字节都需要一个。
   ;;;;
   ;;;;  Dump program code
   ;;;;

   move    DP[0], #str_dumpCodeVariable
   call    txString

   move    DP[0], #0
   move    @DP[0],   #CMD_DUMP_CODE_VARIABLE
   move    @++DP[0], #1        ; Indicates single byte length (<256 bytes)
   move    @++DP[0], #00h      ; AddrL (byte address 0000h)
   move    @++DP[0], #00h      ; AddrH
   move    @++DP[0], #128      ; Length - 128 bytes

   move    LC[1], #128
main_loop1:
   move    @++DP[0], #00h
   djnz    LC[1], main_loop1   

   move    @++DP[0], #000h     ; Padding
   move    @++DP[0], #000h     ; Padding
   move    @++DP[0], #55h
   move    LC[1], DP[0]
   move    DP[0], #0

   nop
   call    sendCommand
   nop
   jump    C, main_failJTAG
   call    getStatus
   jump    C, main_failJTAG
   move    Acc, A[3]         ; Check that loader status is 00h (no error)
   jump    NZ, main_failStatus

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13]  下一页


Tag:控制技术计算机控制技术,工厂电气控制技术控制技术

《实现MAXQ2000微控制器的JTAG加载主机》相关文章