移植PIC Bootloader到项目平台(PIC16F1789)

3840阅读 0评论2015-04-03 jxhaoxia
分类:嵌入式

基于官方Application Notes
AN1301-High-Speed Serial Bootloader for PIC16 and PIC18 Devices
MCU
PIC16F1789
由于官方数据库中无此MCU支持,且需要串口硬件设计支持,项目中只有RS485通信接口。

资源:

1.       修改device.ini

增加config配置字,并且加入以下预定义宏

#include "p16F1789.inc"

#define DEVICEID                0x302A      ;* yhx .313

#define WRITE_FLASH_BLOCKSIZE   .32         ;* yhx

#define ERASE_FLASH_BLOCKSIZE   .32         ;* yhx

#define END_FLASH               0x4000      ;* yhx

#define END_GPR                 0x1000      ;* yhx

2.       修改bootconfig.ini

本人没有使用中断向量重映射,那样还要修改应用程序的链接文件,嫌麻烦!

         配置如下定义

#define USE_MAX_INTOSC

#define RXPORT  PORTC   ;* yhx

#define RXPIN   RC7     ;* yhx

#define TXTRIS  TRISC   ;* yhx

#define TXPIN   RC6     ;* yhx

#define BOOTLOADER_ADDRESS   END_FLASH - (ERASE_FLASH_BLOCKSIZE * 10)

#define BOOTLOADERSIZE  .420

3.       由于项目使用RS485通信,故在sendhostbyte调用中增加收发切换

初始化IO,然后控制485切换

         #ifdef EXTPA

    banksel RCSTA

    bcf     RCSTA, CREN

    banksel PORTB

    BSF PORTB,1

    BSF PORTB,2

#endif

。。。。。。

#ifdef EXTPA

    banksel PORTB

    BCF PORTB,2

    BCF PORTB,1

    banksel RCSTA

    bsf     RCSTA, CREN

#endif

4.       Bootloader模式与app的切换控制采用EEPROM的最后一个位置的值控制,在APP的初始化阶段,将EE0xff位置的值改为非0xff即可。在BootloaderBootloaderBreakCheck调用中判断EE值,选择是运行bootloader还是appvector

#ifdef EXTPA

         ;init io port

    banksel PORTC

    clrf    PORTC

    banksel LATC

    clrf    LATC

    banksel TRISC

    movlw   B'10111101'

    movwf   TRISC

    banksel PORTC

    movlw   B'00000010'

    movwf   PORTC

;------------------------

    banksel PORTB

    clrf    PORTB

    banksel LATB

    clrf    LATB

    banksel TRISB

    movlw   B'11111001'

    movwf   TRISB

    banksel PORTB

    movlw   B'00000000'

    movwf   PORTB

;************************************

#endif

#ifdef DEBUG_LED

         ;init led

    banksel PORTD

    clrf    PORTD

    banksel LATD

    clrf    LATD

    banksel TRISD

    movlw   B'11110111'

    movwf   TRISD

    banksel PORTD

    movlw   B'00000000'

    movwf   PORTD

#endif

 

#ifdef EXTPA

    ;read eeprom last addr,if !=0xff jump to appvector

    banksel EEADRL

    movlw   DATA_EE_ADDR    ;

    movwf   EEADRL          ;Address to read

    bcf     EECON1,CFGS     ;Deselect config space

    bcf     EECON1,EEPGD    ;Point to DATA memory

    bsf     EECON1,RD       ;EE Read

    btfsc   EECON1, RD

    goto    $-1                     ; wait for read to complete

    movf    EEDATL,W        ;W = EEDATL

    xorlw   EE_DEFAULT

    bnz     RunApp          ;if =0xff run bootloader,else run app

#endif

#ifdef DEBUG_LED

    banksel PORTD         ;测试用led灯常亮,指示Bootloader状态

    bsf     PORTD,3

#endif

    movlw   high(BootloaderStart)

    movwf   PCLATH                  ; Bx

    goto    BootloaderStart     ; no BREAK state, attempt to start application

5.       利用SQLite Expert Personal 3工具修改

由于默认的数据库中没有PIC16F1789的支持

C:\Microchip Solutions\Serial Bootloader AN1310 v1.05\devices.db

增加PIC16F1789项目,参考最前面所列MCU的资源

APP中,若需要升级程序,则通过各种人机接口使EE0xff位置的值改为0xff,在调用asm(“reset”),即进入boot模式,使用工具Serial Bootloader AN1310升级代码并跳转

上一篇:原创+转载_barebox启动解析—barebox-2014.08.0
下一篇:低耦合高内聚之软件初始化过程用于MDK-arm