Part Number:TMS570LC4357Other Parts Discussed in Thread:HALCOGEN
This is my test code:
/** @file HL_sys_main.c *@brief Application main file *@date 11-Dec-2018 *@version 04.07.01 * *This file contains an empty main function, *which can be used for the application. */ /* * Copyright (C) 2009-2018 Texas Instruments Incorporated - www.ti.com * * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * *Redistributions of source code must retain the above copyright *notice, this list of conditions and the following disclaimer. * *Redistributions in binary form must reproduce the above copyright *notice, this list of conditions and the following disclaimer in the *documentation and/or other materials provided with the *distribution. * *Neither the name of Texas Instruments Incorporated nor the names of *its contributors may be used to endorse or promote products derived *from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ /* USER CODE BEGIN (0) */ #include "HL_can.h" /* USER CODE END */ /* Include Files */ #include "HL_sys_common.h" /* USER CODE BEGIN (1) */ #define D_COUNT 512 uint32 cnt=0, error =0, tx_done =0; //cnt-计数 error--错误计数 tx_done--发送标志位 uint8 tx_data[8] = {0,1,2,3,4,5,6,7}; //发送缓冲区 uint8 rx_data[8] = {0}; //接收缓冲区 /*缓冲区重定向*/ uint8 *tx_ptr = NULL; uint8 *rx_ptr = NULL; uint8 *dptr=0; //组包时使用 uint16 round_cnt = 0; //初始化值 //void dumpSomeData(uint32 tmp); //组包函数 测试用 /* USER CODE END */ /** @fn void main(void) *@brief Application main function *@note This function is empty by default. * *This function is called after startup. *The user can use this function to implement the application. */ /* USER CODE BEGIN (2) */ void smallDelay(uint32 num) {volatile unsigned int delayval;delayval = num;while(delayval--);// 800000大约168ms 1ms 大约 4762 } /* USER CODE END */ int main(void) { /* USER CODE BEGIN (3) */uint8 *tx_ptr = &(tx_data[0]);uint8 *rx_ptr = &(rx_data[0]);canInit(); // dumpSomeData(cnt);smallDelay(4762);canTransmit(canREG1, canMESSAGE_BOX2, tx_ptr); //发送到外部调试助手while(1) {while(!canIsRxMessageArrived(canREG1, canMESSAGE_BOX2));canGetData(canREG1, canMESSAGE_BOX2, rx_ptr);smallDelay(4762);//将接收到的数据发送出去canTransmit(canREG1, canMESSAGE_BOX2, rx_ptr);//发送到外部调试助手 } /* USER CODE END */return 0; } /* USER CODE BEGIN (4) */ /* USER CODE END */
Alice:
Hello ,
HALCoGen contains several step-by-step example projects including CAN example.
They can be located in HALCoGen by going to Help -> Examples, or Help -> Help Topics -> Contents -> Examples.
There is FAQ for development resource , including CAN example code also.
[FAQ] TMS570LC4357: Examples and Demos available for Hercules Controllers (E.g. TMS570x, RM57x and RM46x etc) – Arm-based microcontrollers forum – Arm-based microcontrollers – TI E2E support forums
If you have further concern , please review the user guide linked below.
2.1. Description — Hercules Safety MCUs Documentation
,
xy s:
Hello Alice.
Thank you for your reply.I want to know what configuration I need if I want to communicate with USB_CAN Tool in order to communicate successfully.
I have tried the baud rate 500K.As in my code above, the USB_CAN tool cannot receive the message sent, and the development board cannot receive the message sent by the USB_CAN tool.The CAN bus mode I configured is normal.There is a CAN transceiver on the development board, the model is SN65HVDA541.
This is my configuration code:
void canInit(void) { /* USER CODE BEGIN (4) */ /* USER CODE END *//** @b Initialize @b CAN2: *//** - Setup control register*- Disable automatic wakeup on bus activity*- Local power down mode disabled*- Disable DMA request lines*- Enable global Interrupt Line 0 and 1*- Disable debug mode*- Release from software reset*- Enable/Disable parity or ECC*- Enable/Disable auto bus on timer*- Setup message completion before entering debug state*- Setup normal operation mode*- Request write access to the configuration registers*- Setup automatic retransmission of messages*- Disable error interrupts*- Disable status interrupts*- Enter initialization mode*/canREG2->CTL = (uint32)0x00000200U| (uint32)0x00000000U| (uint32)((uint32)0x00000005U << 10U)| 0x00020043U;/** - Clear all pending error flags and reset current status */canREG2->ES |= 0xFFFFFFFFU;/** - Assign interrupt level for messages */canREG2->INTMUXx[0U] = (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U;canREG2->INTMUXx[1U] = (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U| (uint32)0x00000000U;/** - Setup auto bus on timer period */canREG2->ABOTR = (uint32)15U;/** - Initialize message 1*- Wait until IF1 is ready for use*- Set message mask*- Set message control word*- Set message arbitration*- Set IF1 control byte*- Set IF1 message number*//*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */while ((canREG2->IF1STAT & 0x80U) ==0x80U){} /* Wait */canREG2->IF1MSK= 0xC0000000U | (uint32)((uint32)((uint32)0x00000000U & (uint32)0x000007FFU) << (uint32)18U);canREG2->IF1ARB= (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x20000000U | (uint32)((uint32)((uint32)1U & (uint32)0x000007FFU) << (uint32)18U);canREG2->IF1MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)8U;canREG2->IF1CMD= (uint8) 0xF8U;canREG2->IF1NO= 1U;/** - Initialize message 2*- Wait until IF2 is ready for use*- Set message mask*- Set message control word*- Set message arbitration*- Set IF2 control byte*- Set IF2 message number*//*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */while ((canREG2->IF2STAT & 0x80U) ==0x80U){} /* Wait */canREG2->IF2MSK= 0xC0000000U | (uint32)((uint32)((uint32)0x00000000U & (uint32)0x000007FFU) << (uint32)18U);canREG2->IF2ARB= (uint32)0x80000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)((uint32)((uint32)2U & (uint32)0x000007FFU) << (uint32)18U);canREG2->IF2MCTL = 0x00001000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)0x00000000U | (uint32)8U;canREG2->IF2CMD= (uint8) 0xF8U;canREG2->IF2NO= 2U;/** - Setup IF1 for data transmission*- Wait until IF1 is ready for use*- Set IF1 control byte*//*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */while ((canREG2->IF1STAT & 0x80U) ==0x80U){} /* Wait */canREG2->IF1CMD= 0x87U;/** - Setup IF2 for reading data*- Wait until IF1 is ready for use*- Set IF1 control byte*//*SAFETYMCUSW 28 D MR:NA <APPROVED> "Potentially infinite loop found - Hardware Status check for execution sequence" */while ((canREG2->IF2STAT & 0x80U) ==0x80U){} /* Wait */canREG2->IF2CMD = 0x17U;/** - Setup bit timing*- Setup baud rate prescaler extension*- Setup TSeg2*- Setup TSeg1*- Setup sample jump width*- Setup baud rate prescaler*/canREG2->BTR = (uint32)((uint32)0U << 16U) |(uint32)((uint32)(4U - 1U) << 12U) |(uint32)((uint32)((6U + 4U) - 1U) << 8U) |(uint32)((uint32)(4U - 1U) << 6U) |(uint32)9U;/** - CAN2 Port output values */canREG2->TIOC =(uint32)((uint32)1U<< 18U )| (uint32)((uint32)0U<< 17U )| (uint32)((uint32)0U<< 16U )| (uint32)((uint32)1U<< 3U )| (uint32)((uint32)0U<< 2U )| (uint32)((uint32)0U << 1U );canREG2->RIOC =(uint32)((uint32)1U<< 18U )| (uint32)((uint32)0U<< 17U )| (uint32)((uint32)0U<< 16U )| (uint32)((uint32)1U<< 3U )| (uint32)((uint32)0U<< 2U )| (uint32)((uint32)0U <<1U );/** - Leave configuration and initialization mode*/canREG2->CTL &= ~(uint32)(0x00000041U);/**@note This function has to be called before the driver can be used.\n*This function has to be executed in privileged mode.\n*//* USER CODE BEGIN (5) */ /* USER CODE END */ }and Circuit diagram:
I have no problem using cases to communicate between CAN1 and CAN2.However, communication with the USB_CAN Tool failed.
Is it the problem of my configuration of CAN module? How do I configure to properly communicate with USB_CAN Tool?
Looking forward to your reply.Thanks !
Alice
,
Alice:
Hello,
Unfortunately, We do not familiar with "USB_CAN Tool" you noted.
Please use the CAN demo in last reply to test your hardware.
,
xy s:
thank you very much ,I solved my problem.It's a hardware connection problem