TMS320C6748
是
Ti
公司的一款超低功耗
DSP
产品,相比其他系列
DSP
它多了
PSC
这个模块,用以管理各个外设的睡眠和唤醒,大大节约了系统功耗,下面我们具体介绍这个模块的细节以及配置。
(
1
)
PSC
模块共有两个控制器模块,分别负责以下外设的配置。



从上图我们可以看到
PSC
模块几乎可以控制
DSP
中所有的外设。
也许这里大家有一个疑问,
PSC0~1
,
Domain0~1
,以及具体的模块好像关系很乱。下面我们绘制了这样一张图来详细说明他们的所属关系:

实际上,只有
DSP
属于
domain1
,其余所有模块均属于
domain0
。
(
2
)下面我们接着介绍
PSC
能够控制各个模块进入的状态
(Enable
、
Disable
、
SyncReset
、
SwRstDisable
、
AutoSleep
、
AutoWake)
一般我么常用的是前
4
个状态,
Enable
为正常工作状态,而
Disable
状态关闭了模块时钟;
SyncReset
使模块处于复位状态,时钟正常,
SwRstDisable
使模块处于复位状态,并关闭了时钟。具体说明见下图所示。

(
3
)
PSC
模块配置说明
a.
等待
PTSTAT
中的
GOSTAT[x]
为清零,
x
为当前模块所属的
domain
。
b.
检查
MDSTAT[x]
中的
STAT
位是否与简要配置的状态相同,如果相同,直接返回。
c.
清除
MDCTL[x]
中的
NEXT
位
(
非常重要
)
。
d.
配置
MDCTL[x]
中的
NEXT
位为指定的状态。
e.
配置
PTCMD
中的
GO[x]
位,开始转换模块状态。
f.
等待,检查
PTSTAT
中的
GOSTAT[x]
是否清零,表示转换完成。
g.
检查
MDSTAT[x]
中的
STAT
位是否与简要配置的状态相同。
二、
GPIO
(通用输入输出)配置介绍
本节我们主要介绍
GPIO
的输入输出控制功能,中断部分下次结合中断向量表一起说明。
(
1
)
TMS320C6748
共有
8 Banks
,
16 GPIOsper Bank
,几乎所有引脚都可以配置成为
GPIO
端口。

对于
GPIO
,我们只需关注这几个寄存器:
DIR
:方向控制寄存器,控制
GPIO
管脚是输入还是输出,其中,对应位置
0
表示该管脚为输出管脚;对应位置
1
表示该管脚为输入管脚。
OUT_DATA
:输出数据寄存器,控制管脚输出电平,其中,对应位置
0
表示该管脚输出为低电平;对应位置
1
表示该管脚输出为高电平。
SET_DATA
:设置数据寄存器,对应位置
1
表示该管脚输出为高电平,需要注意的是该寄存器写
0
无效。
CLEAR_DATA
:清除数据寄存器,对应位置
1
表示该管脚输出为低电平,需要注意的是该寄存器写
0
无效。
IN_DATA
:输入数据寄存器,注意该寄存器是只读寄存器,返回对应位输入电平。
(
2
)
GPIO
配置说明
a.
配置
PSC
模块,使能
GPIO
功能。
b.
配置
PINMUX
模块,选择需要使用的管脚作为
GPIO
引脚。具体可以参看我的这篇帖子。
http://bbs.elecfans.com/forum.php?mod=viewthread&tid=516939&page=1&extra=#pid3851865
c.
配置
DIR
方向控制寄存器。
d.
如果配置
GPIO
为输入引脚,那么在有信号输入后可以读取
IN_DATA
寄存器以获得输入电平;如果配置
GPIO
为输出引脚,可以配置
OUT_DATA
或
SET_DATA
或
CLEAR_DATA
寄存器输出高
/
低电平。
三、
CCS
调试的一些经验
以后如果我想起一些关于
CCS
调试有用的功能,会不定时在帖子最后更新,希望有助于大家的学习
~
大家在调试工程的时候会不会遇到工程出错,但是又找不到事那个部分出问题,一般有经验的工程师在编写子函数时都会写一些返回值,这样在调试时直接查看这些返回值就可以知道程序那里出错了。但是,这样编写效率不高,遇到多次调用子函数的情况很难知道那个部分出问题了。一般工程师们还会在程序运行时及时打印出系统运行状态,主要有两种方法,一种是基于
UART
接口的方法(我们以后结合
UART
再说),另一种是调用
printf
函数的方法。
格式为:
printf
(
"hello !\r\n"
);
重要的事情说三遍,在语句的结尾一定一定要有回车符
\r
和换行符
\n
。
大家可以看到在
CCS
的
Console
里有如下的显示。
