This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:FreeRTOS 引导加载程序应用在 I2C 中出现问题

Guru**** 2451970 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1244024/tms570lc4357-freertos-bootloader-application-getting-problem-in-i2c

器件型号:TMS570LC4357

我正在处理引导加载程序和基于 RTOS 的应用程序。 我的应用程序是工作与所有的外设不带 booloader ,现在当我正在集成引导加载程序部分与应用程序,

应用卡在 I2C 寄存器中 ,状态寄存器在向其数据寄存器发送一个字节时没有被清除

while ((i2c->STR &(UINT32) I2C_TX_INT)== 0u)  

#Bootloader 链接器

VECTORS (X):origin=0x00000000 length=0x00000020 vfill = 0xffffffff
FLASH0 (RX):origin=0x00000020 length=0x0001FFE0 vfill = 0xffffffff
FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
SRAM (rwx):origin=0x08002000 length=0x0002D000
堆栈(RW):origin=0x08000000 length=0x00002000

#Application 链接器

VECTORS (X):origin=0x00010020 length=0x00000080 vfill = 0xffffffff
KERN_FUNC (RX):origin=0x000100A0 length=0x0000FF60 vfill = 0xffffffff er
FLASH0 (RX):origin=0x00020000 length=0x001E0000 vfill = 0xffffffff

FLASH1 (RX):origin=0x00200000 length=0x00200000 vfill = 0xffffffff
堆栈(RW):origin=0x08000000 length=0x00001800
KERN_DATA (RW):origin=0x08001800 length=0x00000800
RAM (RW):origin=0x08002000 length=0x0007E0

引导加载程序跳转到应用程序,当应用程序中禁用 I2C 时,所有任务都在运行,我也在应用程序的 main 中调用了 viminit()  

我在 bootloader 中更改了 vector.asm 文件、应用地址从地址0x00010020开始

复位入口
        b _c_int00
解除引用
       b #0x10018
svcEntry
       b #0x10018
预取入口
       b #0x10018
数据输入
      b #0x10018
      反向中断
      LDR PC、[PC,#-0x1b0]
      LDR PC、[PC,#-0x1b0]

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Praveen:

    是否有可能共享您的完整引导加载程序和应用程序代码?

    您可以使用代码执行私人邮件吗?

    我还想让您参考以下主题、

    (+) TMS570LS1224:使用 CAN 引导加载程序不会从引导加载程序跳到应用代码-基于 Arm 的微控制器论坛-基于 Arm 的微控制器- TI E2E 支持论坛

    这与您所面临的问题相同、应用程序工作正常、直至引导加载程序刷写  

    在本期中、我们在应用中添加了映射时钟函数的注释、说明一切正常。 您能否在终端上也注释掉这个函数并进行测试?

    --

    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Jagadish、您好!

    我做了一些调试、发现当引导加载程序跳转到主应用程序时、它转到 startup.c 文件中的 C_init 函数  

    它初始化 core_init 寄存器、但 不获取任何复位资源、因此它不会进入开关模式、也不会初始化系统 init 和 vim init

    当我在 main ()中调用这些函数时,跳转到 main。 我的应用程序运行良好,你能解释它发生了什么,它会影响我的应用程序部分

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Praveen:

    初始化 core_init 寄存器,但它没有获得任何复位资源 ,因此它不会进入切换状态,也不会初始化系统 init 和 vim init

    实际上、这是预期行为。

    我将解释为什么这会发生、

    引导加载程序代码最初会读取复位原因并擦除相应的复位原因  

    您可以看到函数"getResetSource"、在此处、从"SYS_exception"读取复位原因后、我们将重新写入该寄存器以擦除复位原因。

    因此、当应用程序尝试读取复位原因时、它将获得"NO_RESET"而不是实际复位。 由于存在这种系统初始化和 vim 初始化过程、应用程序代码中不会发生这种情况。

    针对此问题的解决方案是、我们不应在应用程序代码中验证复位原因、而应始终执行系统初始化和 vim 初始化而不考虑复位类型。

    尝试在应用程序启动代码中执行如下操作:

    --

    谢谢。此致、
    Jagadish。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 jagadish,我会 检查一下