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引脚。具体可以参看我的这篇帖子。https://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 !rn"); 重要的事情说三遍,在语句的结尾一定一定要有回车符r和换行符n。 大家可以看到在CCS的Console里有如下的显示。
|