主题中讨论的其他部件:TM4C129EKCPDT,
我正在使用一个PCB,它需要使用PWM驱动TM4C129 MCU的引脚62。 如果在编译时知道MCU部件号,这就足够简单了。 但我希望能够使用 TQFP封装的TM4C129变体,而无需更改软件。 大约一半的零件(例如 TM4C1290NCPDT)为某些引脚(51-63)分配的功能与其他部件(例如 TM4C129EKCPDT)。 引脚62在前者上为PK4/PWM6,在后者上为PK5/PWM7。 我希望能够在运行时检测需要将哪个端口/PWM配置为驱动引脚62。
我通过直接读取MCU的器件识别寄存器并与数据表中的PARTNO值列表进行比较,了解了如何实现这一点,但我想知道是否有更好的方法。 理想情况下,我想使用 SysConcessalPresent()之类的命令来指示当前MCU使用的引脚,这样我就不必维护PARTNO值列表(实际上维护工作并不差, 但实际上测试我是否正确将需要使用八个不同MCU部件中的每一个来加载PCB)。
这就是我现在要做的:
#define DeviceIdentification1 (*( (volatile uint32_t*) ( 0x400FE000 + 0x004 ) ) ) const uint32_t ReadOfDID1 = DeviceIdentification1; // Read the MCU's DID1 register. const uint32_t ReadOfPARTNO = ( ReadOfDID1 >> 16 ) & 0x000000FF; // Extract the PARTNO field. tracepointLogWithCommentAndValueMacro("Device Identification 1 register: 0x%08X", ReadOfDID1 ); tracepointLogWithCommentAndValueMacro("PARTNO field: 0x%08X", ReadOfPARTNO ); // Parts with PK4/PWM6 on pin 62. #define PARTNO_TM4C1290NCPDT (0x19) // Parts with PK5/PWM7 on pin 62. #define PARTNO_TM4C129EKCPDT (0x35) #warning "Expand this to test more CPU variants." if( ReadOfPARTNO == PARTNO_TM4C1290NCPDT ) {
谢谢!
Steve
附注 :FWIW,如果某些部件的MCU引脚59-62上的功能没有在另一半的部件上移动一个(到引脚60-63),这不是问题,但当然现在改变这种情况已经太晚了。