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.

[参考译文] CCS/TMS320F28035:编辑 TDC1000-C2000EVM 的固件以向 Arduino 写入值

Guru**** 2585275 points
Other Parts Discussed in Thread: TMS320F28035, TDC1000-C2000EVM, TDC1000, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/949013/ccs-tms320f28035-editing-firmware-of-tdc1000-c2000evm-to-write-value-to-an-arduino

器件型号:TMS320F28035
主题中讨论的其他器件: TDC1000-C2000EVMTDC1000C2000WARE

工具/软件:Code Composer Studio

您好!  

我已经使用 TDC1000-C2000EVM 一段时间了、并且一直在编辑 TMS320F28035微控制器的固件以实现我想要的功能时遇到问题。 TDC1000连接了一个换能器、用于读取发送和接收信号所需的飞行时间。 它可用于测量液位或液体识别。 重点是、我正在尝试将此值写入 Arduino 并在 Arduino 的串行监视器中读取它。  

我仅限于板上的通信类型、因为我只能直接连接8个 GPIO。 微控制器中有多个 GPIO、但要连接到这些 GPIO、我需要设计自己的电路板或直接焊接到该引脚、这几乎是不可能的。 我发现一个项目与我的项目类似、但他使用了 TDC1000-TDC7200、他对固件仅做了2个小改动:  

https://e2e.ti.com/support/sensors/f/1023/t/720185?CCS-TDC1000-TDC7200EVM-Using-the-board-regardless-GUI

TI 不再支持此板、我假设 TDC1000-C2000是他们使用的新板。 他提到、他编辑了"TDC1000_UART_STREAM = 1"(而不是0)、以便 UART 流成为默认的通信模式。 我在固件中的任何位置都找不到这个、但能够编辑"tof _graph_state = 1"以使 tof 持续读取。

因此 、只需连接到使用 UART 的 GPIO 并进行这两项更改、他就能够在 Arduino 的串行监视器中读取这些值。 我拥有的唯一通信选项是 PWM、I2C 和 CAN TX (通过连接器)。 我的最佳选择似乎是 I2C、但如果可能、仍希望使用 UART。 如果我使用 I2C 路由、我需要连接到 SDA 的 GPIO32和 SCL 的 GPIO33。 GPIO0、1、3和7使用 PWM、GPIO31使用 CANTX。 那么、这就是我所限制的。  

下面是 main_level_tdc1000固件代码。 如果有人可以帮助编辑固件代码、使其达到我希望的效果、我们将不胜感激。 因为我在 C 代码中没有 mcuh 经验。  

谢谢  

//######################################################################################################################
//
//! \addtogroup F2803x_example_list
//! 

SPI 数字回路(SPI_LOOP)

//! //! 该程序使用外设的内部回路测试模式。 //! 除引导模式引脚配置外、无其他硬件配置 //! 要求。 不使用中断。 //! //! 发送数据流、然后与接收到的数据流进行比较。 //! 发送的数据如下所示:\n //! 0000 0001 0002 0003 0004 0005 0006 0007… FFFE FFFF \n //! 这种模式会一直重复。 //! //! b 监视\b 变量\n //! -\n sdata、sent data //! -/b RDATA,接收数据 ////////################## ################################################################################ //$TI 发行版:F2803x C/C++头文件和外设示例 V127 $ //$发行 日期:2013年3月30日$ //######################################################################## #include #include #include #include "DSP28x_Project.h" //器件头文件和示例包括文件 #include "TI_LMP9145.h" #include "lmp91400_spi.h" #include "host_interface.h" #include "DSP2803x_intotoritypes.h" //代码中使用的定义 #define MAX_STR_LENGTH 32 //函数 SysTn extern (void HR2 );void intrl (void 1) void 1 (void 1);void intrutr1 (void 1);void intr1 intrl (void intr1 intr1 (void);void intr1 intr1 intr1 (void);void intrl 2) _interrupt void XINT1_ISR (void); extern void hrcap_pwm_init (void); extern void state_machine_task_timing_init (void); extern void scia_init (void); extern void scia_fifo_init (void); extern void scia_xmit (int a); extern void scia_msg (char *msg); void error (void); void TI_LMP91400_reg_init (void); // extern 变量声明 extern void (extern highalpha_State_ptr)(extern);/extern 16 volatile uint16 n_uintn status/ exuint16 uint16;exvolatile uint16 uintn statesn exuintn exuintn statesn extern status/ exvolatile uint16 uint16 uint16 uintn exuintn extern status_extern status/ exvolatile extern uint16 start_cap; extern volatile uint16 save_ovflow_count; extern uint8_t reg_local_copy[]; extern uint16_t count_per_temp; extern uint16_t c_task_timeout; extern uint16_t c_task_data2host_pending; extern uint16_t generate_software_reset; void example_Memcopy (uint16 * SourceAddr、uint16* SourceEndAddr、uint16* DestAddr); extern Uint16 RamfuncsLoadStart; extern UINT16 RamfuncsLoadEnd; extern UINT16 RamfuncsRunStart; volatile UINT16 single_sle_measure_state = 0; volatile UINT16 Continuous_texter_state = 0; volatile UINT16 tof _graph_state = 0; volatile UINT16 interle_measure_state = 0; volatile UINT16 interle_state_se_states = 0;volatile UINT16 interle_state_state_0_states = 0;volatile UINT16 interrontle_state_state_0_states = 0;volate_une_state_une_une_une_states = 0; uint16 render_pin_state = 0; uint16 start_relay_first_time = 1; char msg_out[32]; char cmdResponseString[MAX_retry_length]=""; uint16_t reg0、reg1; void main (void) {USTR 16 Loadix、ixm1、num_reit_valid_retry = uint16; uint16 Ramfuncsr/ uint16;uint32;uintuintx_ramps = uint32;uint16 uintxramps = uint16、uintuintsstart;uint16、uintxramps = uint16、uintsramps、uint16、uncsramps 示例_Memcopy (&RamfuncsLoadStart、&RamfuncsLoadEnd、 RamfuncsRunStart); //步骤1。 初始化系统控制: // PLL、看门狗、启用外设时钟 //此示例函数位于 DSP2803x_sysctrl.c 文件中。 // InitSysCtrl(); InitSysCtrl_xtal (); // InitSysCtrl_ExtOsc (); //步骤2。 初始化 GPIO: //此示例函数位于 DSP2803x_GPIO.c 文件中, //说明了如何将 GPIO 设置为其默认状态。 // InitGpio();//针对本示例跳过 //仅设置 GP I/O 以实现 SPI-A 功能 //此函数位于 DSP2803x_SPI.c InitSpiaGpio(); //这些函数位于 F2806x_ePWM.c 文件 InitHRCapGpio()中; //不使用 EP2m2消隐() ;//不使用 EPm2 //对于这个示例、只初始化针对 SCI-A 端口的引脚。 //此函数位于 DSP2803x_Sci.c 文件中。 InitCtrlaGpio(); EALLOW; GpioCtrlRegs.GPAQSEL1.bit.GPIO2 = 3;//同步到 SYSCLKOUT GPIO2 (PWM2A) // GPIO-12 - PIN 函数=(TZ1) GpioRegs.GPAPUD.bit.GPIO=12 ;GPCL=GP1=GP1=GIO12;GP1=GP1=GIO12=GP1=GP1=GPOL12/ GPINES1.GPIO12;GP1=GP1=GP1=GP1=GIO12=GPCL=GP1=GP1=GIO12;GP1=GIO12=GP1=GPINES1.G12=GP1=GP1=GIO12=GP1=GPINTRL12=GP1=GP1=GIO12=GPINES1.PM12=GPIO12;GP1=GPIO12=GP1=GPIO12=GP //步骤3. 清除所有中断并初始化 PIE 矢量表: //禁用 CPU 中断 DINT; //将 PIE 控制寄存器初始化为默认状态。 //默认状态是禁用所有 PIE 中断并 清除标志//。 //此函数位于 DSP2803x_PIECTRL.c 文件中。 InitPieCtrl(); //禁用 CPU 中断并清除所有 CPU 中断标志: IER = 0x0000; IFR = 0x0000; //使用指向 shell 中断 //服务例程(service routinese, ISR)的指针初始化 PIE 矢量表。 //这将填充整个表,即使在 本示例中未使用中断//也是如此。 这对于调试很有用。 //可以在 DSP2803x_DefaultIsr.c 中找到 shell ISR 例程 //此函数可在 DSP2803x_PieVect.c 中找到 InitPieVectTable (); state_machine_task_timing_init (); //此示例中使用的中断被重新映射到此 文件中的// ISR 函数。 EALLOW;//这是写入 EALLOW 受保护寄存 器 PieVectTable.HRCAP2_INT =&HRCAP2_ISR; PieVectTable.XINT1 =&XINT1_ISR; EDIS;//这是禁用写入 EALLOW 受保护寄存器 所必需的//步骤4。 初始化所有器件外设: //此函数可在 DSP2803x_InitPeripherals.c // InitPeripherals ();//此示例不需要 SPI_fifo_init ();//初始化 SPI FIFO SPI_init ();//初始化 SPI hrCAP_PWM_init ();// HRCAP1、HR2、PWM2_init (;/init) //初始化 SCI FIFO scia_init(); //初始化 SCI //步骤5。 用户特定代码: //此示例中不使用中断。 #if 1 //将 GPIO 20-22配置为 GPIO 输出引脚(AFE_EN、AFE_RST、AFE_TRIG) EALLOW; // GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;//启用 GPIO GpioDataRegs.GPASET.BIT.GPIO20上的上拉电阻= 1; //设置 TDC1000使能引脚 GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 0;// GPIO20 = GPIO20 GpioCtrlRegs.GPADIR.bit.GPIO20 = 1; // GPIO =输出 // GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;//启用 GPIO GpioDataRegs.GPASET.bit.GPIO21上的上拉电阻= 1; //重置 TDC1000 // GpioDataRegs.gpACLEAR.bit.GPIO21 = 1;//删除重置 LMP91400 GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 0;// GPIO21 = GPIO21 GpioCtrlRegs.GPADIR.bit.GPIO21 = 1; // GPIO =输出 // GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;//启用 GPIO GpioDataRegs.GPACLEAR.bit.GPIO22上的上拉电阻= 1; //清除 TDC1000触发 GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 0;// GPIO22 = GPIO22 GpioCtrlRegs.GPADIR.bit.GPIO22 = 1; // GPIO =输出 // D3特定的更改:使用 GPIO24来触发而不是 GPIO22 //目前 GPIO22和 GPIO24都被分配了触发功能 // GpioCtrlRegs.GPAPUD.bit.GPIO24 = 0;//启用 GPIO GpioDataRegs.GPACLEAR.bit.GPIO24上的上拉电阻= 1; //清除 TDC1000触发 GpioCtrlRegs.GPAMUX2.bit.GPIO24 = 0;// GPIO24 = GPIO24 GpioCtrlRegs.GPADIR.bit.GPIO24 = 1; // GPIO =输出 GpioDataRegs.GPACLEAR.bit.GPIO21 = 1; //删除复位 LMP91400 //将 GPIO0配置为控制电平演示电机继电器 GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//启用 GPIO GpioDataRegs.GPACLEAR.bit.GPIO0上的上拉电阻= 1; //清除继电器引脚 GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;// GPIO0 = GPIO0 GpioCtrlRegs.GPADIR.bit.GPIO0 = 1; // GPIO =输出 //将 GPIO1配置为控制 HV 驱动器 EN1引脚:Carsten 的板和 D3 GpioCtrlRegs.GPAPUD.bit.GPIO1 = 0;//启用 GPIO GpioDataRegs.GPACLEAR.bit.GPIO1上的上拉电阻器= 1; //清除引脚 GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 0;// GPIO1 = GPIO1 GpioCtrlRegs.GPADIR.bit.GPIO1 = 1; // GPIO =输出 //配置 GPIO3以控制 HV 驱动器 EN2引脚:仅 Carsten 的电路板 GpioCtrlRegs.GPAPUD.bit.GPIO3 = 0;//启用 GPIO GpioDataRegs.GPACLEAR.bit.GPIO3 = 1上的上拉; //清除引脚 GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;// GPIO3 = GPIO3 GpioCtrlRegs.GPADIR.bit.GPIO3 = 1; // GPIO =输出 //将 GPIO7配置为控制 TDC1000 CHSWP 引脚:Sergio 和 D3板 GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;//启用 GPIO GpioDataRegs.GPASET.BIO7上的上拉电阻器= 1; //设置引脚<<需要初始为高 电平 GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 0;// GPIO7 = GPIO7 GpioCtrlRegs.GPADIR.bit.GPIO7 = 1; // GPIO =输出 //将 GPIO32配置为控制 CAN 驱动器待机引脚:仅 D3板 GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0;//启用 GPIO GpioDataRegs.GPBCLEAR bit.GPIO32上的上拉电阻器= 1; //清除引脚:D3希望该引脚驱动为低 电平 GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 4;// GPIO32 = GPIO32 GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; // GPIO =输出 //将 GPIO8 (在 GPA 上)配置为 GPIO 输出引脚以控制 LED GpioDataRegs.GPASET.bit.GPIO8=1; // LED 关闭 GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; GpioCtrlRegs.GPADIR.bit.GPIO8 = 1; //将 GPIO9 (在 GPA 上)配置为 GPIO 输入引脚以处理 TDC_ERRB GpioCtrlRegs.GPAMUX1.bit.GPIO9 = 0; // GPIO GpioCtrlRegs.GPADIR.bit.GPIO9=0; //输入 GpioCtrlRegs.GPAQSEL1.bit.GPIO9=0; // XINT1同步到 SYSCLKOUT 只 // GPIO9是 XINT1 GpioIntRegs.GPIOXINT1SEL.bit.GPIOSEL = 9;// XINT1是 GPIO9 //配置 XINT1 XIntraftRegs.XINT1CR.bit.Polity = 0; //下降沿中断 //启用 XINT1 XIntertRegs.XINT1CR.bit.ENABLE = 1; //启用 XINT1 EDIS; #endif TI_LMP91400_reg_init (); #if 1 //用于测试 reg0 = TI_LMP91400_SPIReadReg (TI_LMP91400_config1_REG); reg1 = TI_LMP91400_SPIReadReg (TI_LMP91400_SPIReadReg )(TI_LMP91400_CONFIG1_REG);reg1 = 0xGPIO4 (= 0xGPIOREG_1);GPIOREG0|(= 0xGPIOREG1)(= 0xGPIOREG1)(= 0xGPIOREG0_0_GPIOREG1|(0x4)!= 0xGPIO //设备初始化:点亮 LED #endif //初始化变量 数据通信器= 0;//标记 先捕获多少个脉冲= 0; //将 SOFTRESET 之后的第一个捕获的数据标记为丢弃 //启用此示例所需的中断 //在 PIE 中启用 XINT1:组1中断4 PieCtrlRegs.PIECTRL.bit.ENPIE = 1;//启用 PIE 块 PieCtrlRegs.PIEIER1.bit.INT4 PIE = 1;//启用 PIE 块 PieCtrl.int4 pu = 1;pi4 pi4 pi.int4 pipe.pi4 pipe.pi4 pipu.int4;/ pi4 pi4 pi4 pipu.int //启用 PIE 组4,INT 8 IER |= M_INT1; //启用 CPU INT1 IER |=M_INT4; //启用 CPU INT5 EINT; //启用全局中断 //开始 HRCAP2_ISR 的捕捉信号 START_CAP = 0; // GUI 可控 Generate_software_reset = 0; //对于温度传感器测试 //TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x40);// tx2为04,num1为0 //temp_measure_state = 1; //我们希望在打开中继之前格外确定,以便 至少查看0_threshold ; // if ((*** = 1)&&(c_task_data2host_pending = 1)) { if (single_shot_measure_state = 1) { single_shot_measure_state = 0; start_cap = 0; } if ((temp_measure_state = 1)||(measure_One_temp = 1)) { //number_of _stops _received++; if (number_of _stops _received= 5)|task_t&task = 0_state_t&tore_t&t&t&task_state_t&= 0_stateout_t&t&t&t&t&t&t&t&t&t&t&t&t&t&t& { //临时模式停止脉冲= 5 if (array_index < 5) ix = 95+array_index; 否则 ix = array_index-5; for (i = 0;i < 5;i++) { cmdResponseString[8+4*i]= highpuls[ix]>> 24; cmdResponseString[9+4+i]=10*highpuls[i]=4*highsix];cmdResponseString[highpuls[x]=4*4*10*]=10*highpuls[cmds[i]=10*puls[ix] ;cmdResponseString[highix]=10*2*[highix] 如果(ix+1 =100) ix =0; 否则 ix++; } data_packet_ready = 1; //将状态复位为0 //如果 ((measure_One_temp = 1)||(temp_measure_state = 1) ){ // config2返回到 tof 测量 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_STACH = 1);tCONFIG1400_CL_REG_3[TI_CLMPREG_REG_REG_REG_REG_RETP_TRIG0_TRIG0_TRIG_TRIG_TRIG0_TRIG_TRIG_TRIG3 )、则执行此操作以减慢运行 //通过将 COUNT_PER_temp 置于7 cmdResponseString[7]= COUNT_PER_temp; } } }否则 { START_CAP = 0; PULSE_array_updated = 0; c_Task_data2host_pending = 0; c_task_timeout = 0; if (array_index = 0 ; else = 99;array = 1)让主机知道它是否是交错式临时数据包 //让主机知道它是 tof 数据包而不是临时数据包 cmdResponseString[7]= 0; cmdResponseString[8]= highpuls[ix]>> 24; cmdResponseString[9]= highpuls[ix]>> 16; cmdResponseString[10]= highpuls[ix]>> 8; cmdResponseString[11]= highpulse_sefulse_8]=packet[se_count_flowse_count];cmdResponseStringse_count_count_count_count<1;cmdResponseStrings/sepulse_count_count_count_count_count_count_1 if (level_demo_relay_control = 1) { if (ix = 0) ixm1 = 99; 否则 ixm1 = ix-1; //if (highpulse [ix]< 0x2EE00000)&&(save_ovflow_count = 0)) //< 100us //如果单次下降,在 以下情况下检查差异在100us 内((highpuls[ixm1]>= highpuls[ix])&(highpuls[ixm1]- highpuls[ix])<= 0x2EE00000)&&(save_ovflow_count = 0) ){ //等待5 (highpuls[ixm1]- highpulse <= 0x65000]& threshold [x465000](highpulse)(x_threshold = 0x65000]& highpulse = 0x65000](highpulsepulse = 0x65000](x4mflow_threshold = 0x65000])& //< 150us { //有效低阈值脉冲数 (如果(num_of_valid_lt_PULSEs < 5)&&(!start_relay_first_time)) num_of_valid_lt_PULSE++; 否则 { GpioDataRegs.GPASET.bit.GPIO0 = 1; //设置继电器引脚 RELAY_PIN_STACH = 1; RELAY_PIN_HIGH_COUNT = 0; num_for_VALID lt_PULSE = 0; START_RELAY_FIRST_TIME = 0; } }// 否则(高脉冲[ix]> 0xEA600000) //> 500us //否则((highpuls[ix]> 0x19400000)&&(save_ovflow_count >= 1) //> 600us //否则((highpuls[ix]> 0x46500000)&&(save_ovflow_count >= 1) //> 700us }否则 { num_for_value_lt_pulses = 0; 如果((highpuls[ix]>= highpuls[ixm1])&(highpuls[ixm1])<= 0x2EE00000) //如果( highpuls[ix]>0x4EE00000),请检查它们之间的差异是否在100us 内{//如果(highpuls[ix]>0x4000000)& highflue_fluy (ix1)(highpulsure&***) //>650us { GpioDataRegs.GPACLEAR.bit.GPIO0 = 1; //清除继电器引脚 RELAY_PIN_STACH = 0; RELAY_PIN_HIGH_COUNT = 0; } }否则、如果((((highpuls[ixm1]>= highpuls[ixe])&((highpuls[ixm1]- highpuls[ix])> 0x2EE00000))|| (((cmdlpuls[ixm1]>= highpuls[ixm1])&((highpuls[highpuls[ixmix]- highpuls[ixm1])> 0x2EE00000 ))))、则响应为0x2eSpeed[cmpuls0]= 0;如果响应字符 串0、则为0[cmds/seStrings/se0]= 0、则为0;响应方1 = 0[highse0]/响应方1)、或者 cmdResponseString[11]= 0; cmdResponseString[12]= 0; cmdResponseString[13]= 0; } }} save_ovflow_count = 0; #if 0 if ((temp_measure_state = 2)||(measure_One_temp = 2)) { // temp mode stop pulses = 5 if (array_index < 5) ix = 95+array_index; else ix = array_index-5; for < 5;(i = 5; i++) {cmdResponseString[8+4*i] = highpule[ix]>24; cmdResponseString[9+4*i]= highpule[ix]>>16; cmdResponseString[10+4*i]= highpule[ix]>>8;cmdResponseString[11+4*i] = highpule[100+]=100+] ;cmdx = highpule[= 100+= ***[ix]+= 1;if_packet[ife]+= 1 = 1;cmdx = ***[= 100_= ***[ix //如果 (measure_Oe_temp = 2) { // config2返回到 tof measurement TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、REG_LOCAL _COPY[TI_LMP91400_CONFIG2_REG]); // CONFIG3返回到 tMP91400_CONTRA用于 测量 的 TI_CLMP91400_CONMP_REG_REG_REG_REG0_CONTRAL_REG_REG0_CONTRAL_REG_TI_CONTRAL_REG1[TI_MODE_MODE_CONTRATE_CONTRAT_TI_CONTRAL_COMPONENT];// //通过将 COUNT_PER_temp 置于7 cmdResponseString[7]= COUNT_PER_temp、让主机知道它是否是交错式临时数据包; }否则 //让主机知道它是 tof 数据包而不是临时数据包 cmdResponseString[7]= 0; #endif (DATA_packet_READY = 1) { scia_regature_gpit.gpioString = 0;GP_gpio0 = gpit.gpit_gpio0;GP_gpit_gl = 0;GP_gpioagle.gpit.gl = 0 //将 GPIO8切换 为(ix=0;ix < MAX_STR_LENGTH;ix++) cmdResponseString[ix]= NULL; } } if ((c_task_data2host_pending = 1)&&(c_task_timeout = 1)) { if (single_shot_measure_state = 1) { single_shot_measure_state = 0; start_cap = 0; } if (measure_One_temp = 1) { // config2返回至 tof measurement TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFCON2_REG、REG_REG_3 );TI_CLMP91400_CL_CL_CL_CONFIG0_REG_REG_3;TI_CLMP91400_CL_CL_CL_CONFIG0_CONFIG0_CONFIG1400_CONFIG1400_CL_CL_CONFIG0_CL_CL_CL_CL_CLK_REG_3;TI_CONFIG14_CL_CL_CL_CLK_REG_3 ;TI_CONFIG0_CONFIG0_CONFIG14_CL_CL_CL_CL_ c_task_timeout = 0; c_task_data2host_pending = 0; //发送空数据包以保持通信活动 scia_msg (cmdResponseString); //清除错误:如果用户在 GUI 中选择了超时禁用、则需要 //因此 tdc1000 errob 引脚从不变为高电平 // TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x03); gpioReg1.gpio8 = gpio8;gpio1 = gpio.gpio1 //切换 GPIO8 //确保继电器关闭 // if (level_demo_relay_control = 1) //GpioDataRegs.GPACLEAR.bit.GPIO1 = 1; //清除中继引脚 } Ix = 0;重试= 0;Rx_ERROR = 0; if (SciaRegs.SCIFFRX.bit.RXFFST > 0) { while (ix!= 32) { if (SciaRegs.SCIFFRX.bit.RXFFST > 0) cmdResponseString[x+]= SciaRegs.SCIRXBUF = 1 ;if = rray+1.rf.rx = 1;rf.r1+= r.rrrrrr.rf.rf.r1+= 1;rf.rf.rrrrrr.rrrrrrr.r1+= 1;rrrr //清除溢出标志 } if (ix ==32) {send_response =(UINT16) handleHostCommand(uint8_t *) cmdResponseString,ix); if (send_response) scia_msg (cmdResponseString); for (ix=0;ix < MAX_STR_LENGTH; IX++) cmdResponseString[ix]= NULL; if (generate_software_reset) { generate_software_reset = 0; //等待 UART 与主机的通信完成 //以9600波特发送32bytes delay_US (30000)需要26ms; EALLOW; SysCtrlRegs.WDCR= 0x0040; EDIS; } 否则 { IF (Rx_ERROR) { for (ix=0;ix < MAX_STR_LENGTH;ix++) cmdResponseString[ix]= 0xFF; scia_msg (cmdResponseString); for (ix=0;ix < MAX_STR_LENGTH;ix++) cmdResponseStr[ix]= NULL; = ====================================================================================================== (* alpha_State_ptr)();//跳转至 Alpha 状态(A0、B0、...) //===========================================================================} } void TI_LMP91400_REG_init (void) { // 2MHz 测试单元(黄色) #if 0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x24);// 4个脉冲 TI_LMP91400_SPIWriteReg (TI_LMP91400_CL_CLMP91400_CLG) ;// TI_LM91400_CLMP91400_CLMP91400_CL1、0x1400_CLMP91400_CLMP1、TI_CLMP91400_CLMP1、TI_CLMP91400_CLMP1、TI_CLMP1、TI_CLMP91400_CLMP_CLMP1、TI_CLMP1、0x1400_CLMP_CLMP91400_CLMP1、TI_CLMP1、TI_CLMP1 // 5e (组)-> 1e (边缘模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0x80); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0x1E);TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_TI_F_FLAGS、TI_LMP91400_ERROR) 0x01); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x3B); TI_LMP91400_SPIWriteReg (TI_LMP91400_CLOCK_RATE、0x01); #endif // 1MHz 测试单元(绿色) #if 1. TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x44);// 4个脉冲 TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至40 (1stoop) TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x00);// tx2为04、tx1为0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x0C);//启用消隐、320mv 阈值 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0x40); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0x1E); TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x03); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x23); TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x01); #endif // Eric #if 0的自动演示 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x44);// 3个脉冲 TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至41 (1stoop) TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x00);// tx2为04、tx1为0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x06);//启用消隐、320mv 阈值 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0xC0); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0x28); TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x00); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x21); TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x01); #endif // conti 76cm 储罐设置 #if 0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x5F);// TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至40 (1stoop) TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x00);// tx2为04、tx1为0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x03);// TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0xE3); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0xFF); TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x03); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x13); TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x03); #endif //采用中继设置 #if 0的收敛级别演示 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x48);// TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至40 (1stoop) TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x00);// tx2为04、tx1为0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x04);// TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0xE3); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0xFF); TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x03); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x23); TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x01); #endif // Fluid ID 测试演示9/23/14 #if 0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG0_REG、0x45);// 5个脉冲 TI_LMP91400_SPIWriteReg (TI_LMP91400_config1_REG、0x41);//-> 44至40 (1stoop) TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG2_REG、0x00);// tx2为04、tx1为0 TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG3_REG、0x02);// TI_LMP91400_SPIWriteReg (TI_LMP91400_CONFIG4_REG、0x5F);// 5e (组)-> 1e (边沿模式) TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF1_REG、0x60); TI_LMP91400_SPIWriteReg (TI_LMP91400_TOF0_REG、0x1E); TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REG、0x03); TI_LMP91400_SPIWriteReg (TI_LMP91400_TIMEOUT_REG、0x23); TI_LMP91400_SPIWriteReg (TI_LMP91400_Cock_RATE _REG、0x01); #endif } //步骤7。 在此处插入所有本地中断服务例程(ISR)和函数: void error (void) { GpioDataRegs.GPASET.bit.GPIO8 = 1; //设备出错:关闭 LED _asm (" ESTOP0");//测试失败!! 停下来! for (;;;););}__INTERRUPT void XINT1_ISR (void) {TI_LMP91400_SPIWriteReg (TI_LMP91400_ERROR_FLAGS_REGIS, 0x03);// 确认此中断以从组1 PieCtrlRegs.PIEACK.ALL = PIEACK_Group1获取更多信息;}-->----------------------------------------- 简单的内存复制例程,将代码从闪存移出到 SARAM 中------------------------------------ // 空 example_Memcopy (uint16 * SourceAddr、uint16* SourceEndAddr、uint16* DestAddr) { while (SourceAddr < SourceEndAddr) { *DestAddr++=*SourceAddr++; } 返回;}//==================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================== //不再需要。 //============================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================

 

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

    Colin、

    我们正在努力寻找能够提供帮助的领域专家。 预计周一前回复。

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

    Colin、

    TI 将无法帮助解决任何特定于 Arduino 的界面问题或调试问题。   

    对于 TI 产品、您是否对特定外设有特定问题?  所提出的问题非常广泛,我不确定我们如何提供帮助。  

    我建议使用以下资源:

    • 在 c2000Ware 中、device_support 目录下有许多示例用于在此器件上设置和使用外设。  
    • 此外、我们还针对该器件举办了为期1天的技术讲座。 (training.ti.com/c2000-f2803x-microcontroller-workshop)。   

    此致

    Lori

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

    Lori、

    下面显示了我可以通过 U7直接连接的8个 GPIO。

    这些是它们可以设置为的特定输出。

    GPIO0 - ePWM1输出 A 输出

    GPIO1 - ePWM1输出 B 输出

    GPIO3 - ePWM2输出 B 输出

    GPIO7 - ePWM4输出 B 输出

    GPIO30 -无输出可用  

    GPIO31 - CANTXA - eCAN-A 发送输出

    GPIO32 - CANTXA - ADC 转换启动 B 输出或 SDAA - I 2C 数据开漏双向端口(I/O)

    GPIO33 - CANTXA - ADC 转换启动 B 输出或 SCLA - I 2C 时钟开漏双向端口(I/O)

    我正在尝试将其中一个连接到 Arduino、以实时查看 Arduino 串行监视器功能的价值变化。 我了解如何编辑代码以切换、启用上拉电阻并将 GPIO 配置为输入或输出。 我对输出哪些值而将其设置为输出感到困惑。 我一直无法找到这些价值观与之相关的任何地方。 我起初以为是 ToF (飞行时间值)、但无法证明这一点。 ToF 是我要输出/写入 Arduino 的值。  

    另一个问题是哪种通信方式(哪个 GPIO)最适合连接? 我可能在想 I2C。

    谢谢、  

    Colin  

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

    图片未上传 U7连接的上方、因此此处为

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

    [引用 user="Colin Murphy1"]我对哪些值在设置为输出时输出感到困惑。 我无法找到这些值与之相关的任何位置。

    如果引脚配置为 GPIO 输出、则引脚上的值是逻辑1或逻辑0、具体取决于固件通过设置/清除/切换/数据寄存器更改其状态。  

    如果一个引脚被配置为一个外设输出、那么它被连接至那个外设。  该引脚将根据外设的配置方式在逻辑1和逻辑0之间变化。  例如、在数据表和技术参考手册中有输出波形显示了 ePWM 模块的输出。  

    此致

    Lori