微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > + 最简单的LED程序深度解析

+ 最简单的LED程序深度解析

时间:10-02 整理:3721RD 点击:
本节需参考文档:
TL138_1808_6748-EasyEVM-A3底板原理图.pdf 底板原理图主要看LED等接在那个脚,如图:


高电平LED灯亮,否则不亮。
TMS320C6748 DSP Technical Reference Manual (Rev. A).pdf
C6748的数据手册:主要查看对应的寄存器地址和偏移地址的功能。主要使用PSC,DEV,GPIO等三个寄存器的设置。
代码介绍:
1, 外设使能配置 ,主要是电源供电,为DSP芯片节能,不使用的接口可以不上电。
PSCInit();
使用函数:
int PSCModuleControl (unsigned int baseAdd, unsigned int moduleId,
                         unsigned int powerDomain, unsigned int flags)
分别介绍:baseAdd 基本地址。moduleId 设备类型 powerDomain 是否上电 flags 上电类型()
该函数在.PSC.C文件里面。该文件在工程里面没有,需自己添加进去。
在这个路径里面:demo\StarterWare\Source\StarterWare\Drivers
配置寄存器方法:基本地址+偏移地址=相应的值。
比如上面的:在数据手册里面如下:
基本地址:#define SOC_PSC_1_REGS                      (0x01E27000)   定义在soc_C6748.h 文件中
偏移地址:#define PSC_PTCMD        (0x120)   定义在hw_psc_C6748.h 文件中
见下面的数据手册,可以看到是:0x7120 对应寄存器是:PTCMD


PTCMD 的数据设置含义如图:


可以看到在手册中已经说明的很具体了。有两个数据位有效,0和1 也就是第一位和第二位。其余的功能保留。
两个为功能不同:大致意思是 第一位数据管理 MDCTL 和PDCTL 第二位数据只管理MDCTL
MDCTL 和PDCTL具体什么意思 还没看。
对应数据设置 就是 :0- 没有相应的功能 1- 大概意思就是使用这个功能。
2,IO口配置:
代码:// GPIO 管脚复用配置
        GPIOBankPinMuxSet();
使用函数:void GPIOBank0Pin0PinMuxSetup(void) 这个函数在创龙自己的GPIO.C文件里面。
路径是:demo\StarterWare\Application\Platform 工程文件里面没有 需要自己添加。
配置方法和上面意思差不多,结合数据手册可以看的很明白。
3,IO口输出设置:
代码:
// GPIO 管脚初始化
        GPIOBankPinInit();
使用函数:void GPIOPinWrite(unsigned int baseAdd, unsigned int pinNumber,
                  unsigned int bitValue)
             GPIOPinWrite(unsigned int baseAdd, unsigned int pinNumber,
                  unsigned int bitValue)
这两个个函数在TI的GPIO.C文件里面。
路径是:demo\StarterWare\Source\StarterWare\Drivers 工程文件里面没有 需要自己添加,但是由于和上面的文件重名,所以添加不了,需要改名字后才能添加,建议修改创龙的文件名或者只链接,不用实际文件。
配置方法和上面意思差不多,结合数据手册可以看的很明白。
4,延时函数:
void Delay(unsigned int n)
{
        unsigned int i;
        for(i=n;i>0;i--);
}
这个就是利用时钟周期,一个周期是 1/456M = 2.19NS  程序中时间计算就是:2,19NS * FFFFFF = 0.8S
程序循环执行FOR函数。
很多开发者找相应的函数,无法找到,主要原因是创龙的工程没有把相应的函数添加到工程里面,需要自己添加。这个不是很好,不知道哪位还有更简单的方法?麻烦介绍一下。

整个程序可以简化为:
main()
{
*((volatile unsigned int *)(0x01E27120))=0X?;
*((volatile unsigned int *)(0x01C14124))=0X?; 需要配置4个
*((volatile unsigned int *)(0x01E26010))=0X?;需要配置4个
FOR(;;)
{
delay(0xffffff)
*((volatile unsigned int *)(0x01E2601C))=0X?;需要配置2个 (两个灯)
}
}
哪位高手可以配置全下,没有仿真器,看不到相应的值。

这个…………你的思路与众不同!
我们都喜欢用宏定义,这样程序的可读性比较强,或者是用库函数、BIOS等。
你这直接位操作法,可读性真的是很差的,绕来绕去我看似乎你自己都被绕晕了!

哈哈哈哈谢谢小编分享

瞧瞧啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊

不错












新手!

谢谢小编分享

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top