DSP实验应用GPIO控制

更新时间:2023-09-19 07:49:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验一 GPIO控制

一. 实验基本原理 1. 程序功能:

通过对GPIO的设置来实现对实验板上LED(3D0)的亮灭的控制 具体可分为对DPLL和GPIO的控制.

(1)时钟电路 a) C5509的时钟电路由一个DPLL和一个时钟模式寄存器CLKMD组成

b) 在CLKMD的控制下,DPLL对外部输入时钟进行分频、倍频和锁相,为CPU及外设提供工作时钟

CLKIN pin DPLL CLKOUT pin

CLKMD CLKMD pin (2)时钟模式寄存器CLKMD

相关控制字含义:

IAI:退出省电状态后如何进行跟踪,是继续省电状态之前的设定还是重新进行整个跟踪锁定

IOB:发生失锁时时钟电路的动作,是继续输出时钟信号还是切换到旁路模式

PLLMULT:锁定模式下的倍频次数 PLLDIV:锁定模式下的分频次数

(3)GPIO -C5509有8个相互独立的可编程GPIO管脚(IO0 ~IO7)构成 -各个GPIO管脚的方向控制(输入或输出)由方向寄存器IODIR设定

-各个GPIO管脚上的输入/输出电平由寄存器IODATA控制 2.芯片支持库

(1)DSP片上外设种类及其应用日趋复杂

(2)提供一组标准的方法(APIs:函数、数据类型、宏)用于配置、控制和管理DSP片上外设

(3) 免除用户编写配置和控制片上外设所必需的定义和代码 (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 #include

#include 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); delay();

GPIO_RSET(IODATA,0x000); delay();

} }

void delay() {

Uint32 j = 0,k = 0; for(j = 0;j<0xc0;j++) {

for(k = 0;k<0xffff;k++)

}

}

{}

本文来源:https://www.bwwdw.com/article/imrh.html

Top