TMS320F28379D 在Flash中使用DELAY_US函数

本文介绍了如何在TMS320F28379D DSP开发中,特别是在程序烧录到Flash后,正确使用DELAY_US函数进行微秒延时。作者对比了DSP与STM32的结构差异,并提供了两种在Flash模式下使用DELAY_US的方法:一种是通过修改链接脚本,另一种是在F2837xD_SysCtrl.c文件中添加#define _FLASH。示例代码展示了如何切换LED灯状态并利用延迟函数控制亮灭时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 初次接触TMS320F28x DSP,感觉与STM32单片机学起来还是有区别。 首先长期使用Keil 和STM32CubeMx,软件比较熟悉,初次接触CCS软件,摸起来没有头脑。

2.TMS320F28379D  DSP 使用的是哈佛结构,数据空间和存储空间分开;通过地理的数据总线在程序和数据空间同时访问。 常用的STM32 等MCU 采用冯·诺依曼结构, 数据空间与存储空间共用一个存储空间,通过一组总线(地址总线与数据总线)连接。

3.首先都是从点亮开发板上的LED灯开始。

4.开发板使用的LaunchPad TMS320F28379D, 其中有Led_Blue 连接GPIO31; Led_Red 连接GPIO34.

5.在RAM模式中,F2837xD_usDelay.asm中的微秒延时宏 DELAY_US(A)很容易使用,直接DELAY_US(1000*500);即可。 但若将程序下载到Flash 中,如需使用DELAY_US, 需要将Flash中的程序加载到RAM中来运行。网上给出了一种方法连接如下:

(33条消息) 细读DSP延时函数DSP28x_usDelay()及解决烧录至FLASH出错的方法_嵌入式开发分享的博客-CSDN博客

第二种方法: 

查看F2837xD_SysCtrl.c文件。在文件的define区域 添加 #define _FLASH  即可在flash模式下使用DELAY_US。

  1. void main(void)
  2. {
  3.     int FlushedCount = 30;
  4.     InitSysCtrl();
  5.     GPIO_SetupPinMux(31,GPIO_MUX_CPU1,0);
  6.    
在TI公司的TMS320F28377D微控制器上,如果你想要用定时器控制LED灯的亮灭而不需要精确到us级别的延时,可以采用以下几个步骤: 1. **配置定时器**: - 首先,你需要启用一个定时器资源,例如Timer0。通常选择TIMER0因为它的API相对简单且功能强大。 - 设置定时器的工作模式,比如连续(up mode),并且配置为计数从某个初始值开始。 2. **设置中断**: - 当定时器溢出或到达预设的时间点(如每计数n次)时,配置定时器触发一个中断。 - 在中断服务程序(ISR)里,你需要检查当前的状态条件并操作LED。 3. **控制LED**: - 在ISR内部,你可以改变LED的状态。例如,如果当前计数值是奇数,则点亮LED;如果是偶数,则熄灭LED。 - 然后更新定时器的当前值,并开启下一次计数。 4. **主循环中处理其他任务**: - 回到主程序中,处理其他需要处理的任务,同时允许中断处理定时器事件。 ```c // 示例代码片段 void configure_Timer0(uint32_t count_period) { // 初始化 Timer0 和设置工作模式 Timer0_init(count_period); Timer0_setMode(TIMER_UP_MODE); // 开启定时器中断 EnableInts(Timer0_INT_OVF); // 每个周期结束后触发中断 } void ISR_Timer0() { static uint32_t counter = 0; // 判断计数状态,控制LED if (counter % 2 == 0) { GPIO_write(LED_PIN, LOW); // LED熄灭 } else { GPIO_write(LED_PIN, HIGH); // LED点亮 } counter++; // 更新计数 // 如果达到最大计数值,关闭中断,然后手动复位计数器 if (counter >= MAX_COUNT) { DisableInts(Timer0_INT_OVF); counter = 0; } } int main() { configure_Timer0(SOME_PERIOD); while (1) { // 主循环做其他事情... } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值