【AUTOSAR】Bootloader说明(三)---- copy数据及中断处理

    1. 拷贝代码及数据到RAM CopyCodeToRam ()

28xx的FLASH按扇区操作,但除正在操作的扇区外,其他扇区同样不可读。因而在开始程序刷新后,所有代码都必须在RAM里运行。而代码是存储在FLASH中,在开始程序刷新之前,应该把刷新相关的代码拷贝到RAM中。

刷新相关代码包括:

  • 诊断网络层代码(15765-2)
  • 诊断层代码(uds)
  • 看门狗服务
  • FLASH操作接口代码
  • 定时器代码
  • 中断服务程序

刷新相关的代码拷贝到RAM后,从RAM开始执行刷新程序。

函数原型

Void CopyCodeToRam(void)

函数作用

把代码从FLASH拷贝到RAM

函数参数

函数说明

被main()调用。

10  函数bblk_pre_run_from_ram ()说明

使能看门狗

MCU硬件看门狗的周期为25毫秒(依赖于硬件设计,TBD)。

MCU软件看门狗的周期20毫秒(TBD)。

使能软件看门狗(周期TBD)。

由于软件看门狗服务bblk_kick_sw_wd()会连续两次写相同的寄存器,故代码应用汇编编写,以免被优化器优化,从而导致软件看门狗失败。

相关函数说明如下:

函数原型

void bblk_enable_sw_wd(void)

函数作用

使能DSP软件看门狗

函数参数

函数说明

被bblk_run_from_ram()调用

13函数bblk_enable_sw_wd()说明

函数原型

void bblk_disable_sw_wd(void)

函数作用

禁止DSP软件看门狗

函数参数

函数说明

被bblk_run_from_ram ()调用

14函数bblk_disable_sw_wd()说明

函数原型

void bblk_kick_sw_wd (void)

函数作用

软件看门狗服务

函数参数

函数说明

被bblk_kick_watchdog ()调用

15  函数bblk_kick_sw_wd()说明

函数原型

void bblk_kick_hw_wd (void)

函数作用

硬件看门狗服务

函数参数

函数说明

被bblk_kick_watchdog ()调用

16  函数bblk_kick_hw_wd()说明

函数原型

void bblk_kick_watchdog (void)

函数作用

看门狗服务,包括硬件狗和软件狗

函数参数

函数说明

被bblk_run_from_ram ()调用

17  函数bblk_kick_watchdog()说明

定时器

由于进行Flash擦除及编程等操作时需要的时间很长,所以用定时器中断来执行看门狗服务。

定时器溢出时间为10毫秒(依赖于看门狗,TBD)。

函数原型

void  bblk_init_timer (void)

函数作用

初始化定时器

函数参数

函数说明

被start_task_timer()调用

18函数bblk_init_timer ()说明

函数原型

void  bblk_set_timer_period (void)

函数作用

设置定时器时间

函数参数

函数说明

被start_task_timer()调用

19  函数bblk_set_timer_period ()说明

函数原型

void  bblk_start_task_timer (void)

函数作用

设置定时器时间

函数参数

函数说明

被bblk_run_from_ram()调用

20  函数bblk_start_task_timer ()说明

中断处理

进入FLASH操作前,调用bblk_enter_flashing()将定时器中断服务函数切换到bblk_enter_flashing_isr()。

完成FLASH操作后,调用bblk_post_flashing()将定时器中断函数切换到bblk_normal_isr()。

函数原型

void  bblk_enter_flashing(bool use_flashing_isr)

函数作用

切换定时器中断服务函数

函数参数

use_flashing_isr:是否切换到bblk_enter_flashing_isr()

函数说明

在进行FALSH操作前调用

21  函数bblk_enter_flashing ()说明

函数原型

void  bblk_post_flashing(void)

函数作用

切换定时器中断服务函数到bblk_normal_isr()。

函数参数

函数说明

在进行FALSH操作前调用

22  函数bblk_post_flashing ()说明

函数原型

void bblk_enter_flashing_isr(void)

函数作用

完成看门狗服务,清楚定时器中断标志位,调用到bblk_enter_flashing_isr()

函数参数

函数说明

中断服务程序。如果FLASH操作时间过长,则在中断服务中调用网络层函数。

23  函数bblk_enter_flashing_isr ()说明

函数原型

void bblk_normal_isr(void)

函数作用

完成看门狗服务,清楚定时器中断标志位

函数参数

函数说明

中断服务程序

24  函数bblk_normal_isr ()说明

你可能感兴趣的:(单片机,嵌入式硬件,AUTOSAR,linux,汽车)