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:可以使用中断/通知而不是轮询来接收/发送消息

Guru**** 2470050 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107951/tms570lc4357-can-receive-send-messages-using-interrupt-notification-instead-of-polling

器件型号:TMS570LC4357
主题中讨论的其他器件:HALCOGEN

我想使用中断/通知来接收或发送 CAN 消息。

如果我使用 MessageBox 1、我已经使用 Halcogen 为 canREG3上的 Msg1链接"启用 Int "和"高优先级"接触点。

我可以

canEnableStatusChangeNotification (canREG3);

以及有的

canMessageNotification (节点、MessageBox)

适当组装。

canMessageNotification()上的断点永远不会触发,因此不会发生中断。

这些东西目前在轮询时可以正常工作、因此我知道数据是由 Rx 板发送和接收的(两个轮询)。

我可能缺少中断路由功能。

感谢所有帮助。

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

    ...澄清:由 TX 板传输、由 Rx 板接收(两次轮询)。

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

    根据以下帖子、我为 CAN 3高电平和低电平启用了 VIM 通道45和55、但仍没有发生通知...

    https://community.element14.com/members-area/personalblogs/b/blog/posts/can-communication-with-hercules-safety-microcontroller---part-1-tryout

    谢谢。

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

    尊敬的 Peter:

    IRQ 和 FIQ 是否已启用?

    在向 CPU 发出中断请求之前、有三个"门":

    1. 产生中断请求的模块有一个寄存器来启用它可以产生的每个中断。
    2. 矢量中断管理器(VIM)具有寄存器、可根据优先级机制(先是较低的通道编号)将来自模块的中断请求转发到 CPU。
    3. 最后、必须将 CPU 本身配置为响应 VIM (IRQ 或 FIQ)转发的中断请求。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、我很难理解您所说的一切、尤其是在将项目1到3映射到实施它们的 TI 机构中。  调用_enable_IRQ ()和_enable_FIQ ()并运行中断、因为我已在项目中运行缓冲 DMA SCI"驱动程序"(使用 DMA 完成通知)、并且正在定期打印一个点。

    1- canEnableStatusChangeNotification (CanPort)是否执行此操作?  我看到在 canREG3->CTL 寄存器中设置了 IE1和 IE0位。

    2 -我相信通过 Halcogen 连接的 VIM 通道45和55通道就是这样做的。

    3-如上所述。

    因此、我相信我已经满足了全部3个条件。  我缺少什么?

    在相关的注释中、我尝试重修前面提到的工程、以查看 CAN 通知是否有效(在本例中为 TX):

    https://community.element14.com/members-area/personalblogs/b/blog/posts/can-communication-with-hercules-safety-microcontroller---part-1-tryout

    但我一直在使用 XDS110 USB 调试探针消息:

    德州仪器(TI) XDS110 USB 调试探针/CortexR5:加载程序前必须连接目标。

    我搜索了 e2e 帖子、发现没有适合我的修复。

    探针工作正常、因为我可以使用探针运行其他项目而不会出现问题。  而无需重启 PC 或目标 Launchpad。

    非常感谢。

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

    此帖子修复了 XDS110探测器问题。

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/759209/tm4c123gh6pm-programming-with-xds200-and-ccs/2804781#2804781

    我运行了 test_can 项目并查看正在发生的消息通知(通过调试器断点)。  需要使用 CAN 回路检查该程序的功能。   至少多一个数据点。

    谢谢。

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

    遗憾 的是,这个示例没有向用户展示如何在实际操作中配置硬件,只需调用 canEnableLoopback()即可将 CTL 设置为测试模式,并将测试设置为内部回送,这也有很多其他功能,如将 MB1连接到 MB2以及启用通知中断。  我注释了多余的代码,canInit()、一个 canEnableLoopback ()和一个 canTransmit()足以调用 canMessageNotification()。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="45190" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forume/1107951/tms570lc4357-ca-receive-send-tmessaging-using interrupt-notification-instead 而不是轮询/4105968#4105968"]引用可生成中断请求的模块来生成中断请求/中断。

    #1:在 canREG3->CTL 中设置 IE0和 IE1。 这是为了启用 DCAN0INT 线路和 DCAN1INT 线路

    #2:在 canREG3->CTL 中设置 SIE 位。 canEnableStatusChangeNotification()将执行该操作。 如果 SIE 被置位、 将在每个 CAN 帧上生成一个状态改变中断。

    #3:将  IFxMCTL 寄存器中的 TxIE 或 RxIE 位置位: 简单的方法是使用 HAL GUI 启用它:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [~ userid="45190" url="支持/微控制器/基于 ARM 的微控制器组/基于 ARM 的微控制器/f/基于 ARM 的微控制器-forum/1107951/tms570lc4357-ca-receive-send-tmessages-使用中断通知而不是轮询/4105968#4105968"]
    • 矢量中断管理器(VIM)具有寄存器、可根据优先级机制(先是较低的通道编号)将来自模块的中断请求转发到 CPU。
    • 最后、必须将 CPU 本身配置为响应 VIM (IRQ 或 FIQ)转发的中断请求。
    [/报价]

    1.启用 VIM 通道45和通道55 -->您已经启用了

    2.启用 IRQ 或 FIQ,或者同时启用两者-->您已经启用了

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

    以上是我的 CAN3 Mb1设置。  稍后使用 canUpdateID()将 TX 覆盖到 RX。

    这是我必须设置 CAN3 MessageBox1的代码片段(在这里、canMessageBox[n]是 canMESSAGE_BOX1、而 canPort 是 canREG3)...

    canUpdateID (canPort、canMessageBox[n]、(0x0 << 29)|(id << 18)));//接收、11位标识符
    printf ("canUpdateID msgbx=%d val=0x%x id=0x%x\n"、canMessageBox[n]、(0x0 << 29)|(id << 18)、id);

    ibuf2_t * ib2 =&ibuf2[0];
    ibuf_init (ib2、rx_data、64、32、0);

    canEnableStatusChangeNotification (canPort);
    int ctl = canPort->CTL;
    printf ("*** ctl=0x%x\n"、ctl);
    //canPort->CTL |=(1 << 17)|(1 << 1);// IE1、IE0

    输出是...

    canUpdateID msgbx=1 val=0xc800000 id=0x320
    *** ctl=0x21406

    显示了 CTL 寄存器中设置的 IE1和 IE0。

    我认为这是您为项目1、2和3显示的确切配置。

    遗憾的是,我的 canMessageNotification()函数从未被调用。  缺少内容或内容不正确。

    谢谢。

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

    不知道您是否可以访问相应 的硬件、但是...

    我已将修整后的 hL_sys_main.c 上传到质子邮件中。  对不必要的东西进行了条件化处理。  需要 printf()函数(或注释掉并使用调试器)和 fgetsn()/sscanf()函数来获取单位编号。  或者、使用两个项目源树和硬代码单元号。

    需要两个 Launchpad、其中收发器位于 CAN3上彼此相连。  CAN 端口可轻松更改。

    单元0是轮询发送器。  单元1是轮询接收器。  单元3是中断接收器(替换1);在 hl_notification.c 中的 canMessageNotification()上只有断点  0->1用于完整性检查。  0->3用于测试中断/通知。

    转至 www.protonmail.com 并以带有密码的 sharuser1000登录。

    非常感谢。

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

    您能否在 void can3HighLevelInterrupt (void)函数的第一行添加断点以检查是否获得任何中断(错误、状态更改和 msg box1对象)?

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

    Peter、

    随附一个在 TMS570LC43x HDK 上测试的工作示例。

    CAN1发送数据、CAN2接收数据。

    CAN1_H 连接到 CAN2_H、CAN1_L 连接到 CAN2_L

    TX 和 RX 都使用中断模式

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

    e2e.ti.com/.../TMS570LC43x_5F00_CAN1_5F00_CAN2.zip

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

    是的,当通过轮询 sciSend()显示"*** ctl=..."时,我会得到一个 can3HighLevelInterrupt()。  INT 值为0x8000、因此使用 ES_value 0x10 (RxOK)调用 canStatusChangeNotification()。  如果我在调试器中运行 contine-run、状态更改通知将保持循环(我的发送器是连续的)。  是否应该处理 canStatusChangeNotification()而不是 canMessageNotification()?

    我将看一下您刚才上传的项目。

    非常感谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="521569" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107951/tms570lc4357-ca-receive-send-messaging-using-interrupt-notification-insteing/4107144#4107144"()[引用状态通知](不应处理)]

    否、您应该会收到消息通知。  

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

    我在没有运行 CAN1_CAN2项目的情况下查看了该项目(需要重新连接电路板),但没有看到使用用户代码填充的 canMessageNotification()。  该项目是如何接收的?  我在 CAN2{High、Low}Interrupt()中看不到会修改行为的任何用户代码。

    我注意到 CAN1_CAN2执行 canEnableErrorNotification()而不执行 canEnableStatusChangeNotification()。  已在我的项目中尝试过该操作,但看不到发生了 can3HighLevelInterrupt()。

    谢谢你。

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

    那么、为什么我在 ES 寄存器中获得0x8000、这将获取状态更改路径、而不是消息通知路径?  一个可能的答案是我的发送器过度运行接收器(新数据要么过度写入消息寄存器、要么被丢弃)。  如果发送器与接收器"同步"、则不会发生这种情况、CAN1_CAN2工程可能就是这种情况。

    谢谢。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="521569" URL"~μ C/support/microcontrollers/arm-based microcontrollers-group/arm -based-microcontrollers/f/arm based-microcontrollers-forume/1107951/tms570lc4357-ca-receive-send-tmessaging-using-interrupt-notification-insteal-of polling/410177177#4107177"(未填入用户代码)]

    该函数位于 HL_SYS_main.c 中 因为您没有收到消息通知、所以我只需检查它、而不是检查状态更改。 您可以向项目添加状态更改通知、它不会影响邮件通知的生成。

    e2e.ti.com/.../6170.HL_5F00_sys_5F00_main.c

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

    因此、hl_notification.c 中的"#pragma weak (canStatusChangeNotification)"告诉链接器用户提供的代码会取代随后的"库/默认"代码。  因此、注释"Note-You need to remove canMessageNotification from notification.c to redefine"已过时。

    谢谢。

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

    否,我对"#pragma weat()"的假设显然不正确。  刚刚尝试过、遇到重新定义错误。

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

    挡板。  CAN1_CAN2项目在 hl_notification.c 和 hl_sys_main.c 中都具有 canMessageNotification(),并且该项目构建良好。  当我在项目中尝试相同操作时、重新定义时生成失败。  使用相同的 TI 编译器工具链。  也许有一个不同的构建选项。

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

    嗯、这更令人困惑。  can3HighLevelInterrupt ()调用的 canMessageNotification()函数是 CAN_msg_lib.c 中的函数,而不是 HL_notification.c 或 HL_sys_main.c 中的函数(如果有)。  谁在打电话给谁?  链接器在工作中的技巧、还是仅仅考虑构建选项(顺序)?

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

    不确定您的项目会发生什么情况。

    您能否尝试以下编译选项: --gen_func_subsections=on?

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

    编译器选项未"修复"我的项目中的冲突。  我将介绍 CAN1_CAN2项目的用途...

    错误#10056:重新定义符号"canMessageNotification":首先在"./canMsgLib/CAN_msg_lib.obj"中定义;在"./source/hl_sys_main.obj"中重新定义
    错误#10010:链接期间遇到错误;未构建"DCAN RX.OUT"

    谢谢。

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

    CAN1_CAN2项目也没有该编译器选项。  答案相当简单。  我的项目正在使用 CAN_msg_lib.obj (不具有弱)中的 canMessageNotification()、而您的项目正在使用 HL_notification.c (具有弱)中的 canMessageNotification()。

    ===我的链接器命令...

    构建目标:"DAC_RX.OUT"
    调用:ARM 链接器
    "c:/ti/ccs1000/cs/tools/compiler/ti-cgt-arm_20.2.0.sps/bin/armcl"-mv7R5 -code_state=32 --float_support=VFPv3D16 -g -diag_warning=225 --display_error_excl_number---ccs_ram_swap/it_intrack-"-dcs_info-model/r=--rack_module_display_module_display-m=-dcs_ram_modules/rack_module_display_modules/rack_modules=-rack_module_display_en_en_en_en_en_modules/-rack_modules=-"-rack_en_en_en_en_en_modules/-rack_en_en_en_en_module_module_--"-rack_en_modules/-rack_en_en_en_en_en_modules/-rack_en_en_en_modul be32 -o "dCAN _RX.OUT""./app/sources/app_console.obj ""./app/source_RCV_CONTROL.obj ""./app/app_RCV_vehicle .DC""./canms_lib_lib.obj ""./core/time_hl"/source/mobj "/m小时"/source_hl./obl./source "/smobj "/m./source.hl./obj "/m./m./.obl./sources/hl"

    ===链接器命令...

    构建目标:"TMS570LC43x_CAN1_CAN2.out"
    调用:ARM 链接器
    "c:/ti/ccs1000/tools/compiler/ti-cgt-arm_20.2.0.sps/bin/armcl"-mv7R5 -code_state=32 --float_support=VFPv3D16 -op_for_speed=5 -g --diag_warning=225 -code_status=32 -float_ex-ccs_info-m=-ccs_ram_code_display_ines=-ctrack_off-ccs_infot_info-ment-track_infot/cc=-cc1002.t.track_infot_infot_is/cc=-ctrack_infot_infot_infot_code.m=-ccs_infot_infot/cc=-ctrack_infot_infot_infot/cc=-ccs_infot_code.t.track_infot_infot_infot/cc=-ctrack_infot_infot/cc.track_infot_code.t.track_infot_infot/cc. be32 -o "tms570LC43x_CAN1_CAN2.out"./sources/hl_can.obj "./source/hl_evm.obj "./sources/hl_sys_ssnobj "./hl_mhl_esmcr."/sources/hl_rom_inobj "/source/hl_mcr./hl_rom./hl_inobj "/hl_rom./hl_rom./hl_rom./hl_rom./inobj ./in/in/sources/hl_intr."/sources/hl_intr.//sr./hl_inobj "/sr./sr./inobj "/sr./inobj ."/sources/hl_in./hl_inc/hl_ms./hl_rom./hl_rom./hl_rom./hl_inobj ./hl_cor/in/inobj ././in/in/in/in/

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

    有一点澄清。  CAN_msg_lib.obj 中的 canMessageNotification()最终确实会调用 hl_notification.c 中的 canMessageNotification()(因为我在那里添加了用户代码,该用户代码会调度到 hl_sys_main.c 中的 canMessageNotificationX())。

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

    尊敬的 Peter:

    我不知道编译器/链接器和汇编器如何处理用户预编译库中的弱函数。  

    您的项目是否包含运行时库  rtsv7R4_T_be_v3D16_eabi.lib?

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

    这个 CAN_msg_lib.c 文件/模块是我的前任放入的、它具有一些统计信息收集和数据解码代码。  我无法判断代码的完整性或实验程度、因此必须决定保留/修改代码或将其删除。  我被 CAN_msg_lib.c 中的 canMessageNotification()(没有#pragma)最终如何调用 hl_notification.c 中的 canMessageNotification()感到困惑  我必须在这方面做更多的挖掘/实验、即使它的优先级较低(目前)。

    更高的优先级、以使中断/通知接收(然后传输)正常工作。

    谢谢。

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

    尊敬的 Peter:

    您可以在 SDTO e2e 论坛中咨询 CCS/编译器专家、以了解此编译器相关问题。

    https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum

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

    噢。 愚蠢的我。  由于通知内容未运行,我无法告诉您 hl_notification.c 中的 canMessageNotification()根本没有链接。  我无法在调试器中运行足够多的代码、无法告知_my_代码甚至不在.out 文件中。  我只需要删除 CAN_msg_lib.c、它无论如何也是用于其他目的。

    解决了问题。  只是一个拾取项目的残留物、我以前不知道该做什么。

    谢谢。

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

    我想知道编译器/链接器设置中是否存在处理库中定义的弱函数的技巧。 它可能是已知问题或错误。 与编译器/内衬专家核实不会有任何问题。

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

    在使用"#pragma (weak)"时有一个有趣但可理解的行为。  尽管用户的代码(例如 hl_sys_main.c 中的 canMessageNotification ())_does_取代 默认版本(在 hl_notification.c 中、pragma weak)、但默认版本(在用户代码部分中)中的任何符号仍会链接到编译中(如果用户不提供此类项目、则会显示为未定义 (变量、函数等)。

    总之、我认为现在已经了解这个问题(pragma weak 和链接模块顺序)。

    非常感谢。  这确实是一个红色的错误、尽管有关必须注释掉 hL_notification.c 中的存根的注释现在已过时、并且具有误导性。

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

    您好、您是否有机会查看 INT=0x8000问题、使用一个 Launchpad 可以继续向另一个 Launchpad 传输数据?  这对我的项目至关重要。

    谢谢。

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

    我发送给您的示例代码不是"完整"代码、因为我的 ibuf (中断缓冲区)代码不包含或甚至不需要。  此时,无需添加用户代码,因为我只需在 canMessageNotification()中设置中断,然后查找是否曾经调用过该中断,而不是。  调试回时,可以清楚地看到,can3HighLevelInterrupt()始终采用状态消息通知路径(因为硬件提供的 INT=0x8000),因此永远不会调用 canMessageNotification()(因为硬件不提供传入的 CAN 消息数据)。  如果您能够执行运行 hL_sys_main.c 的双 Launchpad 设置、您是否会看到相同的事件序列?

    非常感谢。

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

    尊敬的 Peter:

    我没有用于 launchpad 上 CAN 通信测试的 CAN 收发器适配器。  

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

    您好!

    您是否有时间和兴趣帮助我/我们调试此问题?  正如我提到过的、这对我的项目至关重要。

    如果您有两个 XL2-570LC43板、那么我可以向您发送一对可轻松安装在板上的收发器板、以便您可以运行我发送给您的 hl_sys_main.c。

    非常非常感谢。

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

    您能否向我发送最新的 hl_sys_main.c 和 HAL 文件(*。hcg 和*。dIL)? 谢谢

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

    我已将最新的修整 hL_sys_main.c 以及.hcg 和.dil 文件上传到质子邮件中。  对不必要的东西进行了条件化处理。  需要 printf()函数(或注释掉并使用调试器)。

    需要两个 Launchpad、其中收发器位于 CAN3上彼此相连。  CAN 端口可轻松更改。

    单元0是轮询发送器。  单元1是轮询接收器。  单元3是中断接收器(替换1)。  只在 hl_notification.c 中的 canMessageNotification()上断点,或在 hl_can.c 中的 can3HighLevelInterrupt ()上断点

    单元0->1用于完整性检查。  单元0->3测试中断/通知。

    转至 www.protonmail.com 并以带有密码的 sharuser1000登录。

    电子邮件主题为"使用中断接收 CAN 消息的包"。

    非常感谢。

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

    如果使用 CAN1或 CAN2、是否存在任何问题? 我可以在2个 HDK 上进行测试、它们具有2个用于 CAN1和 CAN2的收发器、但没有用于 CAN3的收发器。

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

    您只需根据需要修改代码即可使用连接的 CAN 端口。  但是、您需要两个 Launchpad、因为大部分练习是在接收器尝试接收时在一个电路板上运行全速发射的发送器。  在 Unit 0->1两轮询方案中,消息永远不会在接收器处丢失(中断模式接收器也应该是这种情况)。

    我对 TX 节点和 Rx 节点使用相同的代码库、因为它们都连接到 CAN3。  如果在一个节点上使用 CAN1、在另一个节点上使用 CAN2、则需要有两个代码库、用于 CAN 微调。

    请注意,每个 printf()消息的错误编号为递增1,因为它是在阻塞 SCI 模式下运行的。  在我的非阻塞 SCI 缓冲模式(未包括在内)下、误差不会增加。

    非常感谢。

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

    HL_SYS_main.c 的 tweak 为"canPort = canREGx;"

    请注意、.hcg 没有启用/配置所有 CAN 端口、因此无论您使用什么端口、您都需要适当设置 Halcogen。

    谢谢。

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

    您好!

    您能给我发送  CAN_msg_lib.h 吗?  在哪里定义了 DB_initialize()?

    两个电路板是否运行相同的代码?

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

    CAN_msg_lib.h/.c 是我的前任放入环境中的代码的一部分、这些代码连接到 API _Before_、例如 hl_notification.c 文件、导致#pragma weak ()问题出现红色错误。  他不了解 Halcogen 基础设施、TI 在其中提供了第一级硬件支持代码来提供硬件抽象层。  CAN_msg_lib.h 的 include 和对 DB_initialize()[(收集了一些运行 CAN 统计数据)的调用可以注释掉,但测试代码中没有功能差异。  我应该已经删除了这些行。  我已经将.c 重命名为 CAN_msg_lib.c.notused、因此 Launchpad 构建不包含它。  我已将 CAN_msg_lib.h 上传到 质子邮件、供您检查。

    是的。  在我的设置中、两个板运行相同的代码库。  在运行时、用户键入单元号来指定电路板的功能。 在同一主机 PC 上运行两个 Launchpad 时会出现一种奇怪的行为、因为用户实际上无法判断哪个 Launchpad 是哪个单元(我认为 XDS110探针会进行某种"随机选择")。  我连续运行了 sciREG1开关 PC COM 端口。  因此、我将 LED 指示灯点亮为单元号、因此我可以判断哪个物理板是 TX 和哪个 Rx。

    为了完全确定、我将运行我的设置、并对这些行进行注释、以查看是否有任何(失败)行为变化。

    非常感谢。

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

    我刚才注释了这3行、运行行为保持不变、INT 寄存器"卡在"0x8000。

    谢谢。

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

    好的、我将首先读取您的代码、然后尝试使用 HDK 进行测试。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="521569" URL"~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1107951/tms570lc4357-ca-receive-send-tmessaging-using-interrupt-notification-insteal-welling/4114589#4114110]我认为 Launchpad 在运行时哪一个设备与 Launchpad (Launchpadsb)的用户不是随机选择的、我认为哪一个设备是相同的?  i[/报价]

    您应该能够按序列号选择 XDS110探针-请参阅 使用多个 XDS 调试探针进行调试

     如果 launchpad 未编程序列号、则可以使用 XDS110调试探针用户指南中介绍的 xdsdfu 实用程序对序列号进行编程。

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

    感谢您提供有关 XDS110的信息、在我需要时、我会记住这些信息。  在启动新工作区时、我确实遇到了 XDS110探测器的选择对话框、但不确定后续的工作区调用中是否接受该选择。  我知道使用相同 USB 电缆跳数的串行端口;在我的笔记本电脑上、COM4通常由一个 XDS110/Launchpad 使用、而另一个 XDS/Launchpad 则作为 COM6、COM8、COM11等使用、有时两个 LaunchPad 会切换 COM 端口(也可以通过 LED 指示)。  我认为串行端口本身没有标识符、因此"终端"串行端口可能没有要绑定的任何内容。  不确定 Windows 必须绑定到 COM 设备的工具、但我记得使用 Linux 中的 udev 工具执行此操作、用于 USB 串行。

    我认为(两个以上) XDS110探针进行某种"选择"的部分原因是、如果我只有一个 XDS110插入笔记本电脑、执行"调试"会使笔记本电脑 XDS110通信(执行闪存擦除和代码下载)立即运行。  如果我将两个 XDS-110插入笔记本电脑、"Debug"会启动一个"search/scan"(绿色进度条来回移动)大约15秒、然后通信开始。  好的一点是、两个调试会话在尝试使用相同的 XDS110/Launchpad 时不会发生冲突。

    在我的特定测试设置中、由于两个 Launchpad 是对称的/完全一样的、因此我并不关心哪个板是 TX 和哪个 Rx。  如果我需要了解、LED 可提供更多识别功能。

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

    我按照预期填写了"myunit =2"代码、其中发送器板运行中断驱动、"正常工作"。  它的行为与"myunit =0"代码类似、该代码是轮询发送器、可以直接替换。  如果有好奇心、我可以上传代码进行检查。

    您是否有机会获得"myunit == 1"代码(中断驱动的接收器)正在运行(而另一个板正在运行"myunit == 0"、轮询发送器)、以演示卡住的 INT == 0x8000 (具有补充状态 RxOK)?

    谢谢。

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

    我将代码执行了换向、并使中断模式接收器运行。  遗憾的是、我认为 Launchpad 在实现 CAN 中断方面可能存在缺陷。

    我重新安排了我的代码、并执行了以下操作:

    =运行 Halcogen、因此将 canMessageBox1配置为在 RX 上中断。  生成代码。

    =在 canInit()之后立即禁用 IE1和 IE0;

    =执行 canUpdateID()和以前一样,但现在已禁用中断(在更新时注意到一些中断活动)

    =启用 IE1和 IE0、以便发生中断。

    中断模式接收器现在工作正常。  真正的问题是 MessageBox 在 TX _OR_ RX 上中断的 Halcogen 配置。

    遗憾的是、当我尝试使用相同(新)设置来运行中断模式传输时、不会发生中断。  如果我再次运行 Halcogen 来将 canMessageBox1设置为在 TX 上中断、那么中断模式发送器就会工作、但是中断模式接收器现在会中断。  当 canUpdateID()允许用户在代码生成后更改 MessageBox 的(TX/Rx)方向时,似乎没有任何动态机制(API)来告诉 中断遵循方向更改。  也许可以通过直接寄存器操作来实现这一点、但我不知道这是如何实现的。

    在使用两个 messageBox 执行外部回送的示例代码中、一个框可通过生成 Halcogen 代码来设置 TX 中断、另一个框用于 RX 中断、因此该"静态"设置有效。

    我认为这个中断方向功能应该是动态可配置的(当我使用 canUpdateID()来设置 TX/RX 方向时),但是缺少 CAN API 来实现这一点(就我所能说的那样)可能表明中断方向是一个静态的东西,不能随意动态地重新配置。

    感谢您为解决这一问题提供的任何帮助、这是我的最后一个可能的障碍。

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

    问题已经解决了。  我使用 RX 中断配置运行了一次 Halcogen、使用 TX 中断配置运行了一次、 并注意到生成的代码的差异,如下所示, 因此,我刚刚将只适用于 canREG3的 TX 情况的硬代码复制到调用 canUpdateID()和现在的 TX-INTERRUPT 之前。  将需要针对任何 CAN 端口执行此操作的公式、以实现完整性。  如果已经有一个 API 动态地执行此操作、请告诉我。

    LTWPNE1840A:~ Code /DCAN RX_Syscomm_txrx/source 40> diff HL_CAN.c HL_CAN.c.TX
    655,656c655,656
    < canREG3->IF1ARB =(uint32) 0x8000000000U |(uint32) 0x000000000000 U |(uint32) 0x000000000000 U |(uint32)(((uint32) 1U &(uint32) 0x000007FFU)<<(uint32) 18U);
    < CANREG3->IF1MCTL = 0x00001000U |(UINT32) 0x00000400U |(UINT32) 0x00000000U |(UINT32) 0x00000000U |(UINT32) 8U;
    --
    >canREG3->IF1ARB =(uint32) 0x8000000000U |(uint32) 0x000000000000 U |(uint32) 0x20000000U |(uint32)(((uint32) 1U &(uint32) 0x000007FFU)<<(uint32) 18U);
    >CANREG3->IF1MCTL = 0x00001000U |(UINT32) 0x00000800U |(UINT32) 0x00000000U |(UINT32) 0x00000000U |(UINT32) 8U;