DSP实验一:花样流水灯设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

由于采用 CCS5.5 版本导入工程后编译存在很多错误 (包括路径修 改、软件安装缺少驱动等问题) ,捣鼓了半天也搞不好,于是果断放 弃 CCS5.5,安装 CCS8.0 集成开发环境,以正确快速进行实验。 如一个工程前,首先,从 CCS8.0 中的 Resource Explorer 找 到 F28335 例程。
将其导入到 CCS8.0 里面,然后修改里面的 MAIN 函数。如图
可以看出,工程名为“Example_2833xGpioToggle”的主函数包含在 C 文件“example_LEDKey”中。 添加自己的源程序代码, 即可编译成功。
模式*开始 延时控制开始
GPIO 单口控制
7组
延时控制子函数
高 速
中 速
低 速
键扫描 返回
返回
键扫描:采用线键盘(采用矩阵扫描的意义不大) SW1-SW2-SW3 控制流水灯模式,SW4-SW5-SW6 控制流水灯速度。 四、源代码: (注:函数 DELAY_US()为 F28335 官方库函数,表示延时**微秒) A、宏定义、全局变量及子函数声明
// 本例使用下面的GPIO配置 Gpio_select(); // 步骤 3. 清除所有中断初始化中断向量表: // 禁止CPU全局中断 DINT; // 初始化PIE控制寄存器到他们的默认状态. // 这个默认状态就是禁止PIE中断及清除所有PIE中断标志 // 这个函数放在DSP2833x_PieCtrl.c源文件里 InitPieCtrl(); // 禁止CPU中断和清除所有CPU中断标志 IER = 0x0000; IFR = 0x0000; //初始化PIE中断向量表,并使其指向中断服务子程序(ISR) // 这些中断服务子程序被放在了DSP280x_DefaultIsr.c源文件中 // 这个函数放在了DSP2833x_PieVect.c源文件里面. InitPieVectTable();
GpioDataRegs.GPCSET.all |=0x5; GpioDataRegs.GPCCLEAR.all |=0x8; GpioDataRegs.GPBCLEAR.all |=0x20000000; delay_loop(); GpioDataRegs.GPCSET.all |=0x8; GpioDataRegs.GPBSET.all |=0x20000000; GpioDataRegs.GPCCLEAR.all |=0x10; GpioDataRegs.GPBCLEAR.all |=0x10000000; delay_loop(); GpioDataRegs.GPCSET.all |=0x10; GpioDataRegs.GPBSET.all |=0x10000000; } void Model_S4(void) { GpioDataRegs.GPCCLEAR.all |=0x10; GpioDataRegs.GPBCLEAR.all |=0x10000000; delay_loop(); GpioDataRegs.GPCSET.all |=0x10; GpioDataRegs.GPBSET.all |=0x10000000; GpioDataRegs.GPCCLEAR.all |=0x8; GpioDataRegs.GPBCLEAR.all |=0x20000000; delay_loop(); GpioDataRegs.GPCSET.all |=0x8; GpioDataRegs.GPBSET.all |=0x20000000; GpioDataRegs.GPCCLEAR.all |=0x5; delay_loop(); GpioDataRegs.GPCSET.all |=0x5; GpioDataRegs.GPCCLEAR.all |=0x2; delay_loop(); GpioDataRegs.GPCSET.all |=0x2; }
Uint32 delay_model; //流水灯延时模式控制位 /****************函数声明*******************/ void Gpio_select(void); //GPIO端口配置子程序 void delay_loop(void); void Scan_Key(void); void Model_S1(void); void Model_S2(void); void Model_S3(void); void Model_S4(void); //延时模式选择子函数 //键扫描 //模式1子函数 //模式2子函数 //模式3子函数 //模式 4 子函数
B、主函数初始化
// 步骤 1. 初始化系统控制: // 设置PLL, WatchDog, 使能外设时钟 // 下面这个函数可以从DSP2833x_SysCtrl.c文件中找到.. InitSysCtrl(); // 步骤 2. 初始化通用输入输出多路复用器GPIO: // 这个函数在DSP2833x_Gpio.c源文件中被定义了 // 这个函数使GPIO控制类寄存器初始化到默认状态 // InitGpio(); // 本例不用此子函数
第二部分:正文
一、 系统设计方案
设计目的 输入 输出 输入控制 输出模式
花样流水灯 键盘 流水灯 延时速度控制,流水模式 速度*3,模式*4
二、 详细说明 流水灯模式:顺序流水(编号 1) ,倒序流水(编号 2) ,由中到两端 流水(编号 3) ,由两端到中流水(编号 4) 。规定默认状态 1,状态 改变顺序 0->1->2->3->0。 流水灯延时:低速(编号 a) ,中速(编号 b) ,高速(编号 c) 。规定 默认 a,状态改变顺序 a->b->c->a。 按键 SW1 控制流水灯模式,按键 SW4 控制流水灯延时。每按下一次 键,对应模式(延时)会逐次发生相应变化。
/****************端口宏定义*****************/ #define S1 GpioDataRegs.GPADAT.bit.GPIO12//按键SW1-SW3定义模式控制输入口, 此处不采用矩阵键盘,采用线键盘。 #define S2 GpioDataRegs.GPADAT.bit.GPIO13//按键SW4-SW6定义延时速度输入口, 此处不采用矩阵键盘,采用线键盘 /****************常量宏定义*****************/ /***************全局变量定义****************/ Uint32 model; //流水灯模式控制位
C、GPIO 配置
void Gpio_select(void) { EALLOW; GpioCtrlRegs.GPAMUX1.all = 0x00000000; GpioCtrlRegs.GPAMUX2.all = 0x00000000; GpioCtrlRegs.GPBMUX1.all = 0x00000000; GpioCtrlRegs.GPBMUX2.all = 0x00000000; GpioCtrlRegs.GPCMUX1.all = 0x00000000; GpioCtrlRegs.GPCMUX2.all = 0x00000000; GpioCtrlRegs.GPADIR.all = 0x00000000; GpioCtrlRegs.GPBDIR.all = 0xFFFFFFFF; GpioCtrlRegs.GPCDIR.all = 0xFFFFFFFF; EDIS; } // All GPIO // All GPIO // All GPIO // All GPIO // All GPIO // All GPIO // All inputs // All outputs,gpio50 // All outputs
三、 详细设计 1、硬件设计
2、软件设计 I、查询方式 主函数:
开始
主循环:
开始
初始化(时钟、GPIO 配置、 关中断、关看门狗、GPIO 数 据初始化、模式初始化)
模 式 1
模 式 2
模 式 3
模 式 4
主循环
结束
模式 1:GPIO60->61->64->65->66->67->68 模式 2:GPIO68->67->66->65->64->61->60 模式 3:GPIO65->66/64->67/61->68/60 模式 4:GPIO68/60->67/61->66/64->65
E、主循环
for(;;){ switch(model) { case 1:// 模式控制位为1,选择模式一,顺时针流转 Model_S1(); break; case 2:// 模式控制位为2,选择模式二,逆时针流转 Model_S2(); break; case 3:// 模式控制位为3,选择模式三,中间->两端 Model_S3(); break; case 4:// 模式控制位为4,选择模式四,两端->中间 Model_S4(); default: break; } }
F、模式 1 到模式 4 子函数
/*模式 1:GPIO60->61->64->65->66->67->68 模式 2:GPIO68->67->66->65->64->61->60 模式 3:GPIO65->66/64->67/61->68/60
模式 4:GPIO68/60->67/61->66/64->65 采用诸位控制*/ void Model_S1(void) { unsigned int i,model_1=0x00000001; GpioDataRegs.GPBCLEAR.all |=0x10000000; delay_loop(); GpioDataRegs.GPBSET.all |=0x10000000; GpioDataRegs.GPBCLEAR.all |=0x20000000; delay_loop(); GpioDataRegs.GPBSET.all |=0x20000000; for(i=1;i<=5;i++) { GpioDataRegs.GPCCLEAR.all |=model_1; delay_loop(); GpioDataRegs.GPCSET.all |=model_1; model_1=model_1<<1; } } void Model_S2(void) { unsigned int i,model_2=0x00000010; for(i=1;i<=5;i++) { GpioDataRegs.GPCCLEAR.all |=model_2; delay_loop(); GpioDataRegs.GPCSET.all |=model_2; model_2=model_2>>1; } GpioDataRegs.GPBCLEAR.all |=0x20000000; delay_loop(); GpioDataRegs.GPBSET.all |=0x20000000; GpioDataRegs.GPBCLEAR.all |=0x10000000; delay_loop(); GpioDataRegs.GPBSET.all |=0x10000000; } void Model_S3(void) { unsigned int model_3=0x00000002; GpioDataRegs.GPCCLEAR.all |=model_3; delay_loop(); GpioDataRegs.GPCSET.all |=model_3; GpioDataRegs.GPCCLEAR.all |=0x5; delay_loop();
D、GPIO 数据初始化
GpioDataRegs.GPBDAT.all GpioDataRegs.GPCDAT.all model=1; delay_model=1; =0x30000000;//GPIO60,61输出1 =0x0000001f;//GPIO64,65,66,67,68输出1
//默认流水灯模式1 //默认延时模式 1(高速)
相关文档
最新文档