综合实验电子时钟设计_第1页
综合实验电子时钟设计_第2页
综合实验电子时钟设计_第3页
综合实验电子时钟设计_第4页
综合实验电子时钟设计_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PAGEPAGE15综合实验电子时钟设计班级:电子与信息技术学院姓名:XXX学号:XXXXXXXXXXXX一、实验目的1.掌握C6713的中断结构和对中断的处理过程。2.掌握C6713定时器的控制和使用方法。3.掌握键盘的使用原理及编程方法。4.掌握使用C6713DSP的扩展空间控制外围设备信息的方法;了解蜂鸣器发声原理和音乐发生方法;了解液晶显示器的显示控制原理及编程方法。5.掌握C6713的系统自启动设计方法。6.掌握DSP开发的流程及方法。二、实验设备计算机,ICETEK-C6713-EDU实验箱。三、实验内容1.液晶显示屏显示小时分钟秒(格式为XX:XX:XX),可通过键盘设定为24小时制或12小时制,12小时制时要显示出上午还是下午(AM或PM)。2.小时和分钟可通过键盘定位并修改。定位时小时位或分钟位闪烁,可通过键盘数字键直接输入要修改的时间和用“+”和“-”增加减少两种方法改动时间。四、设计原理1定时器原理eq\o\ac(○,1).通用定时器介绍及其控制方法C6000系列DSP在片内集成了32位的通用定时器,可以实现:*事件计数*事件定时*产生脉冲信号*产生CPU中断信号*产生DMA同步事件定时器的控制寄存器:Timer0Timer1寄存器名功能019400000198000定时器控制寄存器CT设置定时器的工作模式监视定时器状态设置TOUT管脚功能019400001980004定时器周期寄存器PR设置定时器的计数周期决定TSTAT信号的频率0194000801980008定时器计数寄存器CN定时器当前计数值C6000的定时器执行的是加计数,真正的计数工作在CNT寄存器中进行,当计数寄存器中的值达到PRD寄存器的值时,自动重新清0。eq\o\ac(○,2).中断控制中断是为使CPU具有对外界异步事件的处理能力而设置的。通常DSP工作在包含多个外界异步事件环境中,当这些事件发生时,DSP应及时执行这些事件所要求的任务。中断就是要求CPU暂停当前的工作,转而去处理这些事件,处理完成后,再回到原来被中断的地方继续原来的工作。显然,服务一个中断包括保存当前处理现场,完成中断服务,恢复各寄存器和现场,然后返回继续执行被暂时中断的程序。请求CPU中断的请求源称为中断源。这些中断源可以是片内的,如定时器等,也可以是片外的,如A/D转换及其他片外装置。片外中断请求连接到芯片的中断管脚,并且在这些管脚处的电平上升沿产生。如果这个中断被使能,则CPU开始处理这个中断,将当前程序流程转向中断服务程序。当几个中断源同时向CPU请求中断时,CPU会根据中断源的优先级别,优先响应级别最高的中断请求。TMS320C6000有11个寄存器管理中断服务:*控制状态寄存器CSR控制全局使能或禁止中断*中断使能寄存器IER使能或禁止中断处理*中断标志寄存器IFR指示有中断请求但未被响应的中断发生*中断设置寄存器ISR手动设置IFR中的标志位*中断清除寄存器ICR手动清除IFR中的标志位*中断服务表指针ISTP指向中断服务表的起始地址*不可屏蔽中断返回指针NRP包含从不可屏蔽中断返回的地址,该中断返回通过BNRP指令完成*可屏蔽中断返回地址IRP可屏蔽中断的返回地址*中断选择寄存器IML可选择CPU中断10-15号对应的中断源*中断选择寄存器IMH可选择CPU中断4-9号对应的中断源*外中断极性选择寄存器EIP选择外中断(INT4-INT7)的触发极性eq\o\ac(○,3).中断响应过程外设事件要引起CPU中断,必须保证:CSR使能中断,IER相应位被使能(置1),ST1寄存器中的INTM使能(置0),中断服务表相应位置放置服务程序入口地址转移指令,相应中断源放入IML或IMH适当位置。当CPU响应中断时,PC指针指向中断向量表中对应中断的地址,进入中断服务子程序。中断向量表是DSP存放中断服务程序的一段内存区域,大小为80H。在中断向量表中,每一个中断占用32个字的空间,一般情况是将一条跳转或延时跳转指令存放于此。中断向量表的位置是可以改变的,修改ISTP寄存器中的中断向量表基地址可以实现这一点。2中断原理eq\o\ac(○,1).TMS320C6713DSP的外中断及响应机制外中断区别于计时器等片内设备中断,它来源于DSP片外,属于硬件中断。外中断信号通过DSP器件封装上的专用管脚输入DSP,属于可屏蔽中断。TMS3206713DSP有三个外中断:EXT_INT4~EXT_INT7,如果CPU允许,这四个信号线上的低脉冲信号会中断CPU。eq\o\ac(○,2).ICETEK-C6713-A板的外中断在外中断EXT_INT4~EXT_INT7中ICETEK-C6713-A板占用了EXT_INT4,其他中断引脚被引到扩展插座P4上供用户扩展、使用。eq\o\ac(○,3).ICETEK-CTR板的键盘接口显示/控制模块通过接口P8连接小键盘,接收小键盘传送的扫描码,并在每个扫描码结束后保存,同时向DSP的EXT_INT5发送中断信号;当DSP读键盘时将扫描码送到数据总线上。小键盘上每次按下一个键将产生两个扫描码。3键盘使用ICETEK-C6713-A是一块以TMS320C6713DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备,也可以接收外设发送的各种数据、信息。键盘的扫描码由DSP的扩展地址0901f0002H给出,当有键盘输入时,读此端口得到扫描码,当无键被按下时读此端口的结果为0。读取的方法如下:nScanCode=*((unsignedshortint*)0901f0002);//nScanCode中为扫描码nnn=*((unsignedshortint*)0901f0004);//读操作清除键盘缓冲区4液晶显示器的显示控制原理及编程方法ICETEK-C6713-A是一块以TMS320C6713DSP为核心的DSP扩展评估板,它通过扩展接口与实验箱的显示/控制模块连接,可以控制其各种外围设备。液晶显示模块的访问、控制是由C6713DSP对CE1空间的特定地址的操作完成。LCD控制寻址:命令发送的地址为0901f0002H,数据发送的地址为0901f0006H和0901f0008H,辅助控制的地址为0901f0004H。显示控制方法:-液晶显示模块中有两片显示缓冲存储器,分别对应屏幕显示的象素,向其中写入数值将改变显示,写入“1”则显示一点,写入“0”则不显示。其地址与象素的对应方式如下:左侧显示内存右侧显示内存Y=01···626301···6263行号X=0↓X=7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB70↓7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB78↓55DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB7DB0↓DB756↓63发送控制命令:向液晶显示模块发送控制命令的方法是通过向命令控制地址写入命令控制字,然后再向辅助控制地址写入0。由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句,或将CE1空间的EMIF访问控制寄存器设置的访问延时加大。下面给出的是基本命令字、解释和C语言控制语句举例。首先定义如下地址,以便在程序中使用:#defineCTRLCDCMDR(*(unsignedshortint*)0x0901f0002)#defineCTRLCDCR(*(unsignedshortint*)0x0901f0004)#defineCTRLCDLCR(*(unsignedshortint*)0x0901f0006)#defineCTRLCDRCR(*(unsignedshortint*)0x0901f0008).显示开关:0x3f打开显示;0x3e关闭显示;CTRLCDCMDR=0x3f;CTRLCDCR=0;//将液晶显示打开CTRLCDCMDR=0x3e;CTRLCDCR=0;//将液晶显示关闭.设置显示起始行:0x0c0+起始行取值,其中起始行取值为0至63;CTRLCDCMDR=0x0c0;CTRLCDCR=0;//设置从存储器第0行开始显示CTRLCDCMDR=0x0c8;port8002=0;//设置从存储器第8行开始显示.设置操作页:0x0b8+页号,其中页号取值为0-7;CTRLCDCMDR=0x0b0;CTRLCDCR=0;//设置即将操作的存储器第0页CTRLCDCMDR=0x0b2;CTRLCDCR=0;//设置即将操作的存储器第2页.设置操作列:0x40+列号,其中列号为取值为0-63;CTRLCDCMDR=0x40;CTRLCDCR=0;//设置即将操作的存储器第0列CTRLCDCMDR=0x44;CTRLCDCR=0;//设置即将操作的存储器第4列-写显示数据:在使用命令控制字选择操作位置(页数、列数)之后,可以将待显示的数据写入液晶显示模块的缓存。将数据发送到相应数据控制地址即可。由于液晶模块相对于DSP来讲是慢速设备,在命令之间可能需要增加延时语句,或将CE1空间的EMIF访问控制寄存器设置的访问延时加大。五、程序设计1.设计思路本设计实现了试验的部分要求,试验要求是设计一个多功能电子时钟,所以采用了多键盘标志来实现功能的控制。具体思路如下:eq\o\ac(○,1)显示器及键盘控制关系是:按键1控制小时;按键2对分钟进行控制。eq\o\ac(○,2)该程序实行的是24小时制,当数到23:59:59后,跳变为00:00:00,从新开始计数。2.设计流程图开始开始定义全局变量定义全局变量定义中断变量,初始化各专用寄存器定义中断变量,初始化各专用寄存器系统按键初始化系统按键初始化液晶模块、定时器初始化液晶模块、定时器初始化进入主循环时间显示进入主循环时间显示有键按下?N有键按下?Y小时和分小时和分钟的设定3源程序#include"ICETEK-C6713-A.h"inth=0,m=0,s=0,dbScanCode;chardbWork;main(){ inti,s1=0,s2=0,m1=0,m2=0,h1=0,h2=0,nBW=0;init_emif(); //初始化emifInitCTR(); //初始化ICETEK-CTR TurnOnLCD(); //打开显示 LCDCLS(); //清除显示内存 LCDCMD(LCDCMDSTARTLINE); //设置显示起始行=0 InitInterrupt(); for(;;) {s1=s%10; s2=s/10; m1=m%10; m2=m/10; h1=h%10; h2=h/10; LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[h2][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+8); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[h1][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+16); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[10][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+24); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[m2][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+32); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[m1][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+40); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[10][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+48); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[s2][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) } LCDCMD(LCDCMDPAGE); //设置操作页=0 LCDCMD(LCDCMDVERADDRESS+56); //起始列=0 for(i=0;i<8;i++) { dbWork=ledkey[s1][i]; LCDWriteLeft(dbWork); //屏幕左侧第1至8行第i列赋值 //(赋值后当前操作列自动加1,所以不需设置) }} }voidinterruptTimer() //中断响应函数{ LBDS^=1; s=s+1; if(s==60) {s=0; m=m+1; if(s==60&&m==60) {m=0;h=h+1; if(h==24) {h=0;m=0;s=0;} } }}voidInitInterrupt(){ //设置中断控制寄存器 CSR&=0xfffffffe; //关中断GIE=0 ISTP=0x00000c00; //重置中断向量表到0C00h IMH=0x08000000; //指定Timer1产生int15中断 IML=0x0a0; //指定xint5中断 ICR=0xff; //清除等待的中断 IER=0x8023; //使能int15、xint5中断 //设置定时器产生中断信号的频率 TIMER1PRD=781250; //定时器1的周期=781250,0.25s TIMER1CTL=0x3c0; //开始计数 CSR=CSR|1; //开中断}voidinterruptXINT5(void) //XINT5中断服务程序{ dbScanCode=GetKey(); if(dbScanCode==SCANCODE_1) {h++;} elseif(dbScanCode=='-'){h--;} elseif(dbScanCode==SCANCODE_2){m--;} elseif(dbScanCode=='+'){m++;}}六、程序调试中断向量表Copyright2001byTexasInstrumentsIncorporated.;Allrightsreserved.PropertyofTexasInstrumentsIncorporated.;Restrictedrightstouse,duplicateordisclosethiscodeare;grantedthroughcontract.;;;"@(#)DSP/BIOS4.60.2212-07-01(barracuda-j15)";;========vectors.asm========;PlugintheentrypointatRESETintheinterruptvectortable;;;========unused========;pluginifiniteloop--withnestedbranchesto;disableinterrupts--forallundefinedvectors;unused.macroid.globalunused:id:unused:id:bunused:id:;nestedbranchestoblockinterruptsnop4bunused:id:nopnopnopnopnop.endm.sect".vectors".ref_c_int00;Centrypoint.align32*8*4;mustbealignedon256wordboundaryRESET:;resetvectormvkl_c_int00,b0;loaddestinationfunctionaddresstob0mvkh_c_int00,b0bb0;startbranchtodestinationfunctionmvcPCE1,b0;addressofinterruptvectorsmvcb0,ISTP;settabletopointherenop3;filldelayslotnopnop;;plugunusedinterruptswithinfiniteloopsto;catchstrayinterrupts;unused1unused2unused3unused4mvkl_XINT5,b0;loaddestinationfunctionaddresstob0 mvkh_XINT5,b0.ref_XINT5bb0nopnopnopnopnopunused6unused7unused8unused9unused10unused11unused12unused13unused14;unused15mvkl_Timer,b0;loaddestinationfunctionaddresstob0mvkh_Timer,b0.ref_Timerbb0nopnopnopnopnop相关头文件及注释#include"scancode.h"//emif#defineEMIF_GCTL0x01800000#defineEMIF_CE10x01800004#defineEMIF_CE00x01800008#defineEMIF_CE20x01800010#defineEMIF_CE30x01800014#defineEMIF_SDRAMCTL0x01800018#defineEMIF_SDRAMTIM0x0180001C#defineEMIF_SDRAMEXT0x01800020#defineEMIF_CCFG0x01840000;//interrupt#defineIMH(*(unsignedint*)0x19c0000)#defineIML(*(unsignedint*)0x19c0004)//timer#defineTIMER1CTL(*(unsignedint*)0x01980000)#defineTIMER1PRD(*(unsignedint*)0x01980004)//McBSP0#defineSPCR0(*(unsignedint*)0x018c0008)#definePCR0(*(unsignedint*)0x018c0024)#defineSPCR1(*(unsignedint*)0x01900008)#definePCR1(*(unsignedint*)0x01900024)//ICETEK-C6713-A#defineLBDS(*(unsignedshortint*)0x90100000)//ICETEK-CTR#defineCTRGR(*(unsignedshortint*)0x0901f0000)#defineCTRKEY(*(unsignedshortint*)0x0901f0002)#defineCTRCLKEY(*(unsignedshortint*)0x0901f0004)#defineCTRLA(*(unsignedshortint*)0x0901f000a)#defineCTRLR(*(unsignedshortint*)0x0901f000e)#defineCTRLCDCMDR(*(unsignedshortint*)0x0901f0002)#defineCTRLCDCR(*(unsignedshortint*)0x0901f0004)#defineCTRLCDLCR(*(unsignedshortint*)0x0901f0006)#defineCTRLCDRCR(*(unsignedshortint*)0x0901f0008)//Specialvalues#defineLCDCMDTURNON0x3f#defineLCDCMDTURNOFF0x3e#defineLCDCMDSTARTLINE0xc0#defineLCDCMDPAGE0xb8#defineLCDCMDVERADDRESS0x40//C6713DSPRegisterscregisterunsignedintIER,IFR,CSR,ICR,ISTP;//Variablesunsignedcharledbuf[8],ledx[8];unsignedcharledkey[11][8]={ {0x00,0x00,0x7C,0x82,0x82,0x82,0x7C,0x00}, //0 {0x00,0x00,0x00,0x84,0xFE,0x80,0x00,0x00}, //1 {0x00,0x00,0x84,0xC2,0xA2,0x92,0x8C,0x00}, //2 {0x00,0x00,0x44,0x92,0x92,0x92,0x6C,0x00}, {0x00,0x00,0x30,0x28,0x24,0xFE,0x20,0x00}, {0x00,0x00,0x4E,0x92,0x92,0x92,0x62,0x00}, {0x00,0x00,0x7C,0x92,0x92,0x92,0x64,0x00}, {0x00,0x00,0x02,0xC2,0x32,0x0A,0x06,0x00}, {0x00,0x00,0x6C,0x92,0x92,0x92,0x6C,0x00}, {0x00,0x00,0x4C,0x92,0x92,0x92,0x7C,0x00}, {0x00,0x00,0x00,0x66,0x66,0x66,0x00,0x00}};#definenMusicNumber52unsignedintmusic[nMusicNumber][2]={ {101,1920},{121,1440},{114,480},{101,1920},{151,1920}, {151,480},{135,480},{121,480},{101,480},{114,960},{121,960},{135,3840}, {121,480},{114,480},{101,480},{91,480},{101,960},{101,960}, {76,1920},{101,1920},{114,960},{121,960},{135,1440},{151,480},{151,1920},{0,1920}, {101,1920},{121,1440},{114,480},{101,1920},{151,1920}, {151,480},{135,480},{121,480},{101,480},{114,960},{121,960},{135,3840}, {121,480},{114,480},{101,480},{91,480},{101,960},{101,960}, {76,1920},{101,1920},{114,960},{121,960},{135,1440},{151,480},{151,1920},{0,1920}};unsignedintpwm[8]={0x86,0x87,0x83,0x8b,0x89,0x8d,0x8c,0x8e};unsignedchardbClearKey;//FunctionsvoidInitInterrupt(void); //初始化中断voidinit_emif(void); //初始化emif接口寄存器voidInitCTR(); //初始化ICETEK-CTRvoidCloseCTR(); //关闭ICETEK-CTR上各设备voidDelay(unsignedintnTime); //延时子程序voidDelay1(unsignedintnTime); //延时子程序(带LED显示刷新)unsignedcharGetKey(); //读取键盘输入voidRefreshLEDArray(); //刷新发光二极管阵列显示voidSetLEDArray(intnNumber); //修改发光二极管阵列显示内容charConvertScanToChar(unsignedcharcScanCode); //将键盘扫描码转换成字符voidLCDCMD(unsignedchardbCommand); //向液晶显示器发送命令voidLCDWriteLeft(unsignedchardbData); //写液晶显示器左半屏voidLCDCLS(); //清除液晶显示器显示voidTurnOnLCD(); //打开液晶显示器voidinit_emif(void){ *(int*)EMIF_GCTL=0x00000078; *(int*)EMIF_CE0=0xffffbf93;/*CE0SDRAM*/ *(int*)EMIF_CE1=0xffffff13;/*CE1Flash8-bit*/ *(int*)EMIF_CE2=0xffffff93;/*CE2Daughtercard32-bitasync*/ *(int*)EMIF_CE3=0xffffff2f;/*CE3Daughtercard32-bitasync*/ *(int*)EMIF_SDRAMCTL=0x53115000;/*SDRAMcontrol*/ *(int*)EMIF_SDRAMTIM=0x00000578;/*SDRAMtiming(refresh)*/ *(int*)EMIF_SDRAMEXT=0x000a8529;/*SDRAMExtensionregister*/}voidCloseCTR(){CTRGR=0; CTRLR=0;CTRLR=0x40;CTRLR=0x0c0; LCDCMD(LCDCMDTURNOFF); dbClearKey=CTRCLKEY; LBDS=0;}voidLCDCMD(unsignedchardbCommand){ CTRLCDCMDR=dbCommand; CTRLCDCR=0;}unsignedcharGetKey(){ unsignedchardbReturn; dbReturn=CTRKEY; dbClearKey=CTRCLKEY; returndbReturn;}charConvertScanToChar(unsignedcharcScanCode){ charcReturn; cReturn=0; switch(cScanCode) { caseSCANCO

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论