-
- 拷贝代码及数据到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()调用 |
函数原型 | void bblk_disable_sw_wd(void) |
函数作用 | 禁止DSP软件看门狗 |
函数参数 | 无 |
函数说明 | 被bblk_run_from_ram ()调用 |
函数原型 | void bblk_kick_sw_wd (void) |
函数作用 | 软件看门狗服务 |
函数参数 | 无 |
函数说明 | 被bblk_kick_watchdog ()调用 |
函数原型 | void bblk_kick_hw_wd (void) |
函数作用 | 硬件看门狗服务 |
函数参数 | 无 |
函数说明 | 被bblk_kick_watchdog ()调用 |
函数原型 | void bblk_kick_watchdog (void) |
函数作用 | 看门狗服务,包括硬件狗和软件狗 |
函数参数 | 无 |
函数说明 | 被bblk_run_from_ram ()调用 |
由于进行Flash擦除及编程等操作时需要的时间很长,所以用定时器中断来执行看门狗服务。
定时器溢出时间为10毫秒(依赖于看门狗,TBD)。
函数原型 | void bblk_init_timer (void) |
函数作用 | 初始化定时器 |
函数参数 | 无 |
函数说明 | 被start_task_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操作前调用 |
函数原型 | void bblk_enter_flashing_isr(void) |
函数作用 | 完成看门狗服务,清楚定时器中断标志位,调用到bblk_enter_flashing_isr() |
函数参数 | 无 |
函数说明 | 中断服务程序。如果FLASH操作时间过长,则在中断服务中调用网络层函数。 |
表23 函数bblk_enter_flashing_isr ()说明
函数原型 | void bblk_normal_isr(void) |
函数作用 | 完成看门狗服务,清楚定时器中断标志位 |
函数参数 | 无 |
函数说明 | 中断服务程序 |