Other Parts Discussed in Thread:TMDSHSECDOCK, TMDSCNCD280025C, C2000WARE, MSP430G2553
1、TMDSCNCD280025C + TMDSHSECDOCK 套件简介
1.1 TMDSCNCD280025C 是一款适用于 TI C2000™ MCU 系列 F28002x 器件的低成本评估和开发板。它附带一个 HSEC180(一种 180 引脚高速边缘连接器,用作 controlCARD),非常适合用于初始评估和原型设计。进行 TMDSCNCD280025C 评估时,需要一个 180 引脚集线站 TMDSHSECDOCK,这个dock把芯片的引脚全数引出,并有一个电压供电的接口。如果没有dock,就只能进行开发的演示和代码的测试,不能进入项目的开发过程。
主页超链接如下,
e2echina.ti.com/…/195513在
1.2 TMDSHSECDOCK引脚集线站,提供了以下三个功能,MCU关键信号的引接出线,自定义洞洞板区域可以直接焊接分立元件,USB或者外接5V供电接口。
1.3 使用开发板首先要仔细阅读下面的手册,
https://www.ti.com.cn/cn/lit/ug/spruir3a/spruir3a.pdf?ts=1608516487556&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Ftool%252Fcn%252FTMDSCNCD280025C%253F_ticdt%253DMTYwODUxNjA1NnwwMTZmNTUwYjVkZjUwMDBlZWQ3NjJkNjc2NDRjMDMwNzIwMDEyMDZhMDA5M2N8R0ExLjIuMTk3NTMwMzM5NC4xNTc3Njc5ODA5fDA
最重要的是正确设定如下跳线
对照位置如下,
具体芯片参数参照
https://www.ti.com.cn/cn/lit/ds/sprsp45b/sprsp45b.pdf?ts=1608516674752&ref_url=https%253A%252F%252Fwww.ti.com.cn%252Ftool%252Fcn%252FTMDSCNCD280025C%253F_ticdt%253DMTYwODUxNjA1NnwwMTZmNTUwYjVkZjUwMDBlZWQ3NjJkNjc2NDRjMDMwNzIwMDEyMDZhMDA5M2N8R0ExLjIuMTk3NTMwMzM5NC4xNTc3Njc5ODA5fDA
作为DSP概念的鼻祖,运行在100MHz,具有128KB的Flashhe 24kB的RAM,提供浮点加速器FPU和数学计算加速器TMU,这款FM2800025C是入门级芯片,但是同样具备强大的功能。这款芯片一直是微波雷达的控制芯片的首选。其他的功能同样强大,12位3.45MSPS的ADC采样功能尤其出色,能够实现高性能的信号采集,搞个入门级的2M多通道示波器就用一块板子就可以搞定了。
其他还有适合于电机控制和电源控制的增强型ePWM功能,更是本芯片目前主打的特色。
2、开发环境和开发工具
2.1 采用TI芯片的众多好处之一就是CCS,一个强大的免费开发工具。因此,对应TI的芯片来说,第三方IDE如IAR等,都不是首选。同时还提供了CCS cloud的选项,此前用过,也开发了一些项目。不过,这次还想用的时候,发现google改了规矩了,所以的crx都要他的market上才能下载使用,要不就认为是不安全的插件。这样,TI agent就无法连接使用。
这样,就gooogle又帮助我们提供了一个卸载停用chrome的工具。总是搜集个人信息,还要云端备份我的各种密码就不说什么了,啊这。。。
果断下载安装CCS,访问https://www.ti.com/tool/CCSTUDIO,
下载安装无门槛,
启动程序,
显示创建的项目
2.2 配套提供了C2000ware,访问ti.com/tool/c2000ware,就可以直接下载,安装再CCS不同的目录,
3、专用库和例程
对应于开发的过程,需要导入的库都再C2000ware中,同时提供了PWM的传输控制例程,下面是main主循环的代码
// Included Files // #include "driverlib.h" #include "device.h" // // Example configuration parameters // #define BIT_RESOLUTION 11 #define PWM_FREQ200U // // Globals // float32_t offset = 0.00016f; float32_t duty_offset = 0.0f; volatile float32_t duty_output = 0.0f, duty_output_minus_offset = 0.0f, dig_value_output_norm = 0.0f; volatile uint16_t dig_value_output = 0, dig_output_buff[500] = {0}, count = 0; volatile uint32_t cap1Count = 0, cap2Count = 0, cap3Count = 0; volatile uint32_t absCountOn1 = 0, absCountPeriod1 = 0, ecapIntCalCount = 0; // // Function Prototypes // void initGPIO(void); void configECAP(void); __interrupt void ecap6ISR(void); // // Main // void main(void) {//// Initialize device clock and peripherals//Device_init();//// Disable pin locks and enable internal pull-ups.//Device_initGPIO();//// Initialize PIE and clear PIE registers.//Interrupt_initModule();//// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).//Interrupt_initVectorTable();//// Initialize GPIOs for ECAP//initGPIO();//// Interrupts that are used in this example are re-mapped to ISR functions// found within this file.//Interrupt_register(INT_ECAP6, &ecap6ISR);//// Configure eCAP//configECAP();//// Configure HRCAP//HRCAP_enableHighResolutionClock(HRCAP6_BASE);//// Add small delay for HRCLK to start//__asm(" RPT #25 || NOP");//// Enable high resolution capture//HRCAP_enableHighResolution(HRCAP6_BASE);//// Calculating the offset in duty based on the offset value// at 100 Khz//duty_offset = offset * ((float)PWM_FREQ / 100.0f);//// Enable interrupts ECAP interrupt//Interrupt_enable(INT_ECAP6);//// Enable Global Interrupt (INTM) and realtime interrupt (DBGM)//EINT;ERTM;while(1){} // end infinite for loop }
可以看到如何引入库,使用GPIO初始化和对应控制的,其他的项目都可以按照这个来执行和开发,上手很快,逻辑也很清楚。
4、上电测试和连接
4.1 项目的开发从创建新项目开始,
再测试以前,先拿MSP430G2553搞一个电灯,
#include <msp430.h> /** * blink.c */ void main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer P1DIR |= 0x01; // configure P1.0 as output volatile unsigned int i; // volatile to prevent optimization while(1) { P1OUT ^= 0x01; // toggle P1.0 for(i=50000; i>0; i--);// delay } }
下载和运行正确。
4.2 使用F2800025C,创建项目
这个过程很顺利,
按照手册的指引,需要用XD100v2的USB UART emulator模拟器下载。
代码创建以及编译都可以通过,多次下载都没有成功。
于是测试以下,再创建页面有一个verify.,不过,结果是这样滴,
经过再次确认跳线和引脚位置
很清楚地可以看到跳线是出厂设置,同时可以清晰地看到PCB清洁整齐,反面就更干净简单了,不上图了。
所以,所以,串口芯片正确识别但是找不到hardware,就是连不上芯片。
刚上手,就初步确认这个板子挂了。
5、Summary
从芯片的参数了解和板子的开发来看,这个板子是超级强大滴,开发也是非常流畅的。资源充分。只是做了一个最快评测。希望能尽快beduge一下,解决这个问题。
Susan Yang:
1 使用默认的跳线设置
2 TMDSCNCD280025C + TMDSHSECDOCK 的话,2者的USB口均连接到电脑(2根USB线)
3 CCS内导入例程,路径:C2000Ware_3_03_00_00\device_support\f28002x\examples\led
找到下图内的文件,并检查一下配置
4 点击 test connection,测试成功
请您完全按照上面的步骤测试一遍,哪一步若是出现了问题,请给出截图,谢谢
,
Susan Yang:
请问您是否进行了测试?结果如何?
,
user3625209:
如TI专家答复,JTAG测试通过。显示截图如下。
问题解决。
那么就是评估板供电电压不足,不能单独flash。必须用dock板才可以的。
建议在手册中更新这个faq。
谢谢
,
Susan Yang:
谢谢您的反馈。您可以看一下下面文档的2 Hardware Quick Setup Guide 以及 4.3 Using the controlCARD
www.ti.com.cn/…/spruir3a.pdf
,
user3625209:
1. 在开发环境搭建完成并测试之后,就可以使用C2000ware进行开发了。使用导入功能导入c2000ware目录下的example,根据项目选定需要使用的功能导入,以LED为例,导入如下,
本次导入ADC和GPIO目录下的文件
2、编译和下载
选择指定工程为当前活动目录active,然后点击build,开始编译。范例程序都经过测试,所以,很快就编译完成,提出的代码优化建议是因为后续有TI的优化软件和程序开发导则,可以更好提高效率。
随后点击下载,download,就可以把代码下载到开发板了,详情可以在下图找到,
3 范例程序分析
3.1 GPIO部分
和通常的GPIO设定一样,GPIO需要初始化,设定时钟,使能中断,
Device_init();
Interrupt_initModule();
Interrupt_initVectorTable();
setup1GPIO();
对应把GPIO6设定为high的步骤为
//// Enable a GPIO output on GPIO6, set it high//GPIO_setPadConfig(6, GPIO_PIN_TYPE_PULLUP);// Enable pullup on GPIO6GPIO_writePin(6, 1);// Load output latchGPIO_setPinConfig(GPIO_6_GPIO6);// GPIO6 = GPIO6GPIO_setDirectionMode(6, GPIO_DIR_MODE_OUT);// GPIO6 = output设定完成,初始化之后,赋值是采用
GPIO_writePin(6, 1);这样的函数实现的,// LEDs // #define DEVICE_GPIO_PIN_LED131U// GPIO number for LED4 #define DEVICE_GPIO_PIN_LED234U// GPIO number for LED5 #define DEVICE_GPIO_CFG_LED1GPIO_31_GPIO31// "pinConfig" for LED4 #define DEVICE_GPIO_CFG_LED2GPIO_34_GPIO34// "pinConfig" for LED5外部接口是在31U引脚编号上实现。
对应于引脚的编号在现有的文档中没有找到,不过可以通过DOCK上的编号对照使用。在LED中,板载的led定义为DEVICE_GPIO_PIN_LED1,具体编号在device.h中体现3.2 ADC的实现同样需要先开发板初始化,Device_init();Device_initGPIO();Interrupt_initModule();Interrupt_initVectorTable();Interrupt_register(INT_ADCC1, &adcC1ISR);initADC();initEPWM();initADCSOC();ASysCtl_enableTemperatureSensor();DEVICE_DELAY_US(500);Interrupt_enable(INT_ADCC1);EINT;ERTM;然后ADC初始化ADC_setVREF(ADCC_BASE, ADC_REFERENCE_EXTERNAL, ADC_REFERENCE_3_3V);ADC_setPrescaler(ADCC_BASE, ADC_CLK_DIV_4_0);ADC_setInterruptPulseMode(ADCC_BASE, ADC_PULSE_END_OF_CONV);ADC_enableConverter(ADCC_BASE);DEVICE_DELAY_US(1000);根据资料,ADC采样速率可以达到3M以上,是高速的ADC采样工具,集中体现了TI在模拟领域的优势。
读取ADC参数就比较简单了,可以用以下的函数快速实现
sensorSample = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);sensorTemp = ADC_getTemperatureC(sensorSample, 3.3f);上面还把读取的参数转换了成了十进制的实数温度值。4. 其他的范例程序,都可以参照这个过程逐个分析。具体的函数流程,其实和数据手册中的读取描述是相同的,具体参见有关TMS320F28002x 微控制器数据表。基于丰富的范例,开发的过程可以精准而又迅速。
,
Susan Yang:
谢谢您的详细测评!