DSP课程设计精.docx
- 文档编号:9987988
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:17
- 大小:29.47KB
DSP课程设计精.docx
《DSP课程设计精.docx》由会员分享,可在线阅读,更多相关《DSP课程设计精.docx(17页珍藏版)》请在冰豆网上搜索。
DSP课程设计精
基于TMS320LF2407按键计数器设计
一.说明
在控制电路中,通常需要以按键来控制程序执行流程或是输入数据。
在图4.1中,4个按键K1~K4分别对应TMS320LF2407芯片的引脚IOPF3~IOPF4作为I/O端口的输入,8只发光二极管LED1~ILED8通过SW-DIP8拨码开关和74HC273锁存器芯片分别对应TMS320LF2407芯片的引脚IOPF0~IOPF7作为I/O端口的输出。
本设计仅使用一条I/O引脚,借助软件查询方法点亮8只发光二极管。
本设计中的K1键对应的TMS320LF2407输入I/O引脚为IOPF3,当按下K1键,则将所对应的端口F数据和方向控制寄存器(PFDATDIR)的第3位为(IOPF3引脚)0,同时点亮发光二极管。
二.内容
1.设计并调试用于TMS320LF2407芯片的计数程序,要求由按键K1作输入并对其进行计数,计数的结果由LED7~LED0发光二极管以二进制方式显示。
2.对程序稍作改动,用K4按键完成上述功能。
三.硬件电路
图4.1TMS320LF2407与键盘、LED接口电路
四.参考程序清单
通过编程,设计一个按键计数器,要求刚接通电源时,8只发光二极管都不亮,表示计数器的初始值为0,即二进制数的00000000B;当按下K1键时,计数器的值加1,发光二极管LED0点亮,表示二进制数的00000001B,然后松开按键;再次按下K1键时,计数器的值又加1,发光二极管LED1点亮,表示二进制数的00000010B,然后再松开按键;依次类推。
直到按动了255次按键时,发光二极管LED7~LED0会全部点亮,其后的一次K1键按下时将使计数器回0,就这样循环往复。
C语言程序
(1)所需的复位和中断向量定义文件“vectors.asm”同于前。
在这以后的所有例程中,如果没有特别说明,vectors.asm都是相同的。
(2主程序
源程序代码:
#include"register.h"
intm=0x0001;
initial(
{
asm("setcSXM";
asm("clrcOVM";
asm("clrcCNF";
*SCSR1=0x81FE;
*WDCR=0x0E8;
*IMR=0x0000;
*IFR=0x0FFFF;
*MCRA=*MCRA&0x0FF;
*PFDATDIR=*PFDATDIR|0x0400;
*PBDATDIR=*PBDATDIR|0x0FF00;
*PFDATDIR=*PFDATDIR|0x0404;
*PFDATDIR=*PFDATDIR&0xFFFB;
}
voidinlinedisable(
{
asm("setcINTM";
}
intkeyscan(
{
intk,j;
k=*PFDATDIR&0x0008;
if(k==0x0008
k=0;
else
k=1;
if(k==1
{
for(j=30000;j>0;j--
j=j;
k=*PFDATDIR&0x0008;
if(k==0x0008
k=0;
else
k=1;
}
return(k;
}
intkeyserve(
{
intk;
k=*PFDATDIR&0x0008;
if(k==0x0000
*PBDATDIR=(*PBDATDIR&0xFF00+m++;
else
*PBDATDIR=*PBDATDIR;
*PFDATDIR=*PFDATDIR|0x0404;
*PFDATDIR=*PFDATDIR&0xFFFB;
}
main(
{
disable(;
initial(;
while(1
{
inti;
i=0;
i=keyscan(;
if(i==1
keyserve(;
}
}
voidinterruptnothing(
{
return;
}
汇编程序
;键盘与发光二极管配合使用程序
st0_temp.usect".b20",1;60
st1_temp.usect".b20",1;61
context.usect".b20",7;62-68
STACK.usect".stack",40
IOSFT_REG.usect".data0",1;显示数据移位寄存器
IO_COUNT.usect".data0",1;延时计数寄存器
IO_DATA.usect ".data0",1;I/O临时数据缓冲区
LEDXS.usect".data0",1;LED显示的数据
LEDFLAG.usect".data0",1;LED显示标志寄存器
K1FLAG.usect".data0",1;K1标志寄存器
KEYDATA.usect".data0",1;读得键盘值存放寄存器
DP_USER.set5
.include"F2407REGS.H";引用头部文件
.def_c_int0
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
(1)建立中断向量表
.sect".vectors";定义主向量段
RSVECTB_c_int0;PM0ResetVector1
INT1BPHANTOM;PM2Intlevel14
INT2BGISR2;PM4Intlevel25
INT3BPHANTOM;PM6Intlevel36
INT4BPHANTOM;PM8Intlevel47
INT5BPHANTOM;PMAIntlevel58
INT6BPHANTOM;PMCIntlevel69
RESERVEDBPHANTOM;PME(AnalysisInt10
SW_INT8BPHANTOM;PM10UserS/Wint—
SW_INT9BPHANTOM;PM12UserS/Wint-
SW_INT10BPHANTOM;PM14UserS/Wint-
SW_INT11BPHANTOM;PM16UserS/Wint-
SW_INT12BPHANTOM;PM18UserS/Wint-
SW_INT13BPHANTOM;PM1AUserS/Wint-
SW_INT14BPHANTOM;PM1CUserS/Wint-
SW_INT15BPHANTOM;PM1EUserS/Wint-
SW_INT16BPHANTOM;PM20UserS/Wint-
TRAPBPHANTOM;PM22Trapvector-
NMIBPHANTOM;PM24NonmaskableInt3
EMU_TRAPBPHANTOM;PM26EmulatorTrap2
SW_INT20BPHANTOM;PM28UserS/Wint-
SW_INT21BPHANTOM;PM2AUserS/Wint-
SW_INT22BPHANTOM;PM2CUserS/Wint-
SW_INT23BPHANTOM;PM2EUserS/Wint-
SW_INT24BPHANTOM;PM30UserS/Wint-
SW_INT25BPHANTOM;PM32UserS/Wint-
SW_INT26BPHANTOM;PM34UserS/Wint-
SW_INT27BPHANTOM;PM36UserS/Wint-
SW_INT28BPHANTOM;PM38UserS/Wint-
SW_INT29BPHANTOM;PM3AUserS/Wint-
SW_INT30BPHANTOM;PM3CUserS/Wint-
SW_INT31BPHANTOM;PM3EUserS/Wint—
;中断子向量入口定义pvecs
.sect".pvecs";定义子向量段
PVECTORSBPHANTOM;保留向量地址偏移量-0000h
BPHANTOM;保留向量地址偏移量-0001h
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-05
BPHANTOM;SCI_RX_ISR;保留向量地址偏移量
BPHANTOM;SCI_TX_ISR;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-0A
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-10
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-15
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-1A
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-20
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-25
BPHANTOM;保留向量地址偏移量-0026h
BT1GP_ISR;保留向量地址偏移量-0027hT1PINT中断
BPHANTOM;保留向量地址偏移量-0028h
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-2A
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;pvectoraddroffset0x02f-T3PINT
BPHANTOM;保留向量地址偏移量-30
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-35
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-3A
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-3F
BPHANTOM;CANMBX_ISR;保留向量地址偏移量
BPHANTOM;保留向量地址偏移量-0041h
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;
(2)主程序
.text
_c_int0
CALLSYSINIT;调系统初始化程序
CALLKEYLEDINIT;调键盘和LED初始化程序
LDP#DP_USER;指向0280h~0300h区
SPLK#01H,IOSFT_REG;寄存器和标志初始化
SPLK#00H,IO_COUNT
SPLK#001H,IO_DATA
SPLK#001H,LEDXS
SPLK#00H,LEDFLAG;LEDFLAG.0=1表示K1,K2,K3按下
;LEDFLAG.0=0表示K4按下
SPLK#01H,K1FLAG
CLRCINTM;开总中断
LOOP:
CALLKEY;调键盘程序,即扫描键盘
LDP#DP_USER
BITLEDFLAG,15
BCNDLEDBD1,TC
LACLIO_COUNT
SUB#03E8H
BCNDWAIT,LEQ;判10s延时到否
LEDBD1:
SPLK#00H,IO_COUNT
LDP#DP_PF2
LACLPFDATDIR
OR#0404H;IOPF2=1
SACLPFDATDIR;开74HC273片选信号
LDP#DP_USER
LACLLEDXS
OR#0FF00H;IOPB口为输出方式
LDP#DP_PF2
SACLPBDATDIR;送要显示的数据到IOPB口
LACLPFDATDIR
AND#0FFFBH;IOPF2=0
SACLPFDATDIR;关74HC273片选信号
LDP#DP_USER
BITLEDFLAG,15
BCNDLEDBD2,TC
LACLLEDXS
SFL
SACLLEDXS
LACLIOSFT_REG
SFL
SACLIOSFT_REG
BITIOSFT_REG,BIT8;判是否循环完一次
BCNDLOOP1,TC
BWAIT
LOOP1:
LDP#DP_USER
SPLK#01H,IOSFT_REG;赋初值
LEDBD2:
LACLIO_DATA
SACLLEDXS
WAIT:
NOP
BLOOP
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(3)系统初始化程序
SYSINIT:
SETCINTM
CLRCSXM
CLRCOVM
CLRCCNF;B0区被配置为数据空间
LDP#0E0H;指向7000h~7080h区
SPLK#81FEH,SCSR1;时钟4倍频,CLKIN=6M,CLKOUT=24M
SPLK#0E8H,WDCR;不使能WDT
LDP#0
SPLK#02H,IMR;使能中断优先级INT2
SPLK#0FFFFh,IFR;清中断标志
LDP#DP_EVA;指向7400h~7480h区
SPLK#80H,EVAIMRA;使能T1PINT中断
SPLK#0FFFFh,EVAIFRA;清EVA中断标志
SPLK#0,GPTCONA
SPLK#0EA6H,T1PR;使定时器每10ms产生一次中断
SPLK#0,T1CNT
SPLK#0164CH,T1CON;设置通用定时器1
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(4)键盘和发光二极管初始化程序
KEYLEDINIT:
LDP#DP_PF2
LACLMCRC
AND#083FFH;IOPF2,IOPF[3~6]配置为一般的I/O口
SACLMCRC
LACLMCRA
AND#000FFH;IOPB[0~7]配置为一般的I/O口
SACLMCRA
LACLPFDATDIR
OR#0400H;IOPF2为输出方式
AND#08787H;IOPF[3~6]为输入方式
SACLPFDATDIR
LACLPBDATDIR
OR#0FF00H;IOPB[0~7]为输出方式
SACLPBDATDIR
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(5)键盘程序
KEY:
CALLREADKEY;调读键程序
LACLKEYDATA
BCNDKEYRET,EQ;ACC=0?
CALLKEYDELAY
材料:
玉米粒50克,胡萝卜30克,生菜30克,鸡蛋3个,面粉100克
椒粉各少许;
做法:
1.先将鸡蛋打散成蛋液,加入少许胡椒粉拌匀,胡萝卜洗净切沥干切碎,葱切花;
2.将胡萝卜粒和玉米粒放入沸水中煮熟后沥干待用;
3.面粉中加入适量的盐,再倒入鸡蛋液,加入适量的水搅拌成
4.放入沥干的胡萝卜粒和玉米粒、生菜、葱花,再加入少许芝
;再一次读键值
LACLKEYDATA
BCNDKEYRET,EQ
LDP#DP_USER;判断按键情况
BITKEYDATA,15
BCNDKEYRET,NTC
CALLK1;"+"键按下
BKEYRET
KEYRET:
LACLKEYDATA
AND#0FFF0H;清读取的键值寄存器
SACLKEYDATA
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(6)读键子程序
READKEY:
LDP#DP_PF2
LACLPFDATDIR;取出键值PFDATDIR.3~PFDATDIR.6
RPT#2
SFR;右移3位
OR#0FFF0H;屏蔽高4位(用到4个键)
CMPL
LDP#DP_USER
SACLKEYDATA;存放键值
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(7)用软件延时30mS消抖动
KEYDELAY:
LACC#6000
KEYD1:
SUB#1
RPT#80
NOP
BCNDKEYD1,NEQ
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(8)键子程序
K1:
;"+"键子程序
READK1:
CALLKEYDELAY
CALLREADKEY
LDP#DP_USER;判断按键K1是否松开
BITKEYDATA,15
BCNDREADK1,TC
SPLK#01,LEDFLAG;关闭LED左移标志,即LED对同一个数不刷新
LACLIO_DATA
ADD#1
SACLIO_DATA
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(9)中断程序
GISR2:
;优先级INT2中断人口
;保护现场
LDP#0;保存机器上下文
SST#0,st0_temp;使用自动寻址DP-0
SST#1,st1_temp;保存状态寄存器到B2DARAM.
SACLcontext;保存ACC的低16位
SACHcontext+1;保存ACC的高16位
SARAR1,context+2
SARAR2,context+3
SARAR3,context+4
SARAR4,context+5
SARAR5,context+6
LDP#0E0H
LACCPIVR,1;读取外设中断向量寄存器(PIVR),并左移一位
ADD#PVECTORS;加上外设中断入口地址
BACC;跳到相应的中断服务子程序
T1GP_ISR:
;通用定时器1中断入口
LDP#DP_USER
LACLIO_COUNT
ADD#1
SACLIO_COUNT
; 恢复现场
LDP#DP_EVA
SPLK#0FFFFH,EVAIFRA
LDP#0
LARAR5,context+6
LARAR4,context+5
LARAR3,context+4
LARAR2,context+3
LARAR1,context+2
LACCcontext+1,16
ADDScontext
LST#1,st1_temp
LST#0,st0_temp
CLRCINTM;开总中断,因为一进中断就自动关闭总中断
RET
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;(10)假中断程序
PHANTOM
KICK_DOG;复位看门狗
RET
END
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)