- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DSP实验应用GPIO控制
实验一 GPIO控制
实验基本原理
1. 程序功能:
通过对GPIO的设置来实现对实验板上LED(3D0)的亮灭的控制
具体可分为对DPLL和GPIO的控制.
(1)时钟电路
C5509的时钟电路由一个DPLL和一个时钟模式寄存器CLKMD组成
在CLKMD的控制下,DPLL对外部输入时钟进行分频、倍频和锁相,为CPU及外设提供工作时钟
(2)时钟模式寄存器CLKMD
相关控制字含义:
IAI:退出省电状态后如何进行跟踪,是继续省电状态之前的设定还是重新进行整个跟踪锁定
IOB:发生失锁时时钟电路的动作,是继续输出时钟信号还是切换到旁路模式
PLLMULT:锁定模式下的倍频次数
PLLDIV:锁定模式下的分频次数
(3)GPIO
-C5509有8个相互独立的可编程GPIO管脚(IO0 ~IO7)构成
-各个GPIO管脚的方向控制(输入或输出)由方向寄存器IODIR设定
-各个GPIO管脚上的输入/输出电平由寄存器IODATA控制
2.芯片支持库
(1)DSP片上外设种类及其应用日趋复杂
(2)提供一组标准的方法(APIs:函数、数据类型、宏)用于配置、控制和管理DSP片上外设
免除用户编写配置和控制片上外设所必需的定义和代码
(4)CSL库函数大多数是用C语言编写的,并已对代码的大小和速度进行了优化
(5)CSL库是可裁剪的:即只有被使用的CSL模块才会包含进应用程序中
(6)CSL库是可扩展的:每个片上外设的API相互独立,增加新的API,对其他片上外设没有影响
实验所用到的硬件资源和在片外围电路
硬件资源
CPU、LED、蜂鸣器、电阻、电容等
在片外围电路
时钟发生器、通用输入/输出口等
参数设置
CPU时钟:PLL multiply value=24; PLL divide value =1;
CLKOUT=PLLMULT/(PLLDIV+1)*CLKIN
=24/2*12M=144MHZ
小灯亮或灭的时间:N*13*16*65536/(144*10^6)=1.1s(N为指令周期)
实验流程图
程序
#include <csl_pll.h>
#include <csl_chip.h>
#include <csl_gpio.h>
void delay();
/*锁相环的设置*/
PLL_Config myConfig = {
0, //IAI: the PLL locks using the same process that was underway
//before the idle mode was entered
1, //IOB: If the PLL indicates a break in the phase lock,
//it switches to its bypass mode and restarts the PLL phase-locking
//sequence
24, //PLL multiply value; multiply 24 times
1 //Divide by 2 PLL divide value; it can be either PLL divide value
//(when PLL is enabled), or Bypass-mode divide value
//(PLL in bypass mode, if PLL multiply value is set to 1)
};
main()
{
/*初始化CSL库*/
CSL_init();
/*设置系统的运行速度为144MHz*/
PLL_config(&myConfig);
/*确定方向为输出*/
// ioport unsigned int *IODIR;
// IODIR=(unsigned int *)0x3400;
// ioport unsigned int *IODATA;
// IODATA=(unsigned int *)0x3401;
// *clkmd =0x21f3; // 晶振12Hz,9Hz=0x21f3;// 144MHz=0x2613
GPIO_RSET(IODIR,0xFF);
while(1)
{
GPIO_RSET(IODATA,0x0c0);
del
文档评论(0)