C语言版 DSP原理及应用实验指导书

更新时间:2024-04-12 18:32:01 阅读量: 综合文库 文档下载

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

自动化工程学院测控实验室

DSP原理及应用实验指导书

目 录

目 录

第一章 实验要求 ......................................................................................... - 1 - 第二章 CVT-DSP-Ⅲ数字信号处理教学实验系统简介 ........................... - 2 -

一 CVT-DSP-III 型实验箱结构和功能 ....................................... - 2 - 二 功能单元介绍 ........................................................................... - 3 -

第三章 实验项目 ......................................................................................... - 6 -

实验项目一 CCS软件的使用 ........................................................... - 6 - 实验项目二 跑马灯实验 .................................................................. - 13 - 实验项目三 数码管显示实验 .......................................................... - 15 - 实验项目四 键盘接口实验 .............................................................. - 18 - 附录1 F2407REGS.H文件 ......................................................... - 21 -

- 1 -

第一章 实验要求

第一章 实验要求

1.实验不限定具体时间,由学生根据自己计划灵活选择,但必须保证实验规定学时,以保证实验效果(每个实验项目按2学时计算),实验必须在本门课程考试之前完成。

2.实验成绩实行“目标化”管理。采用时间上完成规定学时(每个实验按2个学时计算),实验成绩的以百分制体现,由实验时间、解决问题的能力以及实验报告综合给定,并按比例计入期末总成绩。

3. 实验报告按以下要求完成: (1) 实验目的; (2) 实验要求; (3) 实验技术指标;

(4) 对以DSP320LF2407处理器为核心DSP系统工作原理进行分析; (5) 记录、分析实验结果;

- 1 -

第二章 JXARM9-2410教学实验系统简介

第二章 CVT-DSP-Ⅲ数字信号处理教学实验系统简介

一 CVT-DSP-III 型实验箱结构和功能

该实验箱采用双CPU结构,如图1。从CPU(TMS320C5416)模块,该模块采用插件形式,可自由更换和升级,该CPU 承担整个实验箱各种算法类实验和高速数据的传输计算任务。主CPU(TMS320C2407)模块,该模块采用插件形式,该CPU承担整个实验箱各种控制实验(如电机控制、LCD和LED显示、键盘控制等等)和网络信号的传输和控制任务。

两CPU通过5416上的HPI可进行实时并行数据交换。当无(TMS320C2407)模块时该实验系统可通过CPLD移交外设控制权给(TMS320C5416)模块而构成54XDSP 实验系统。用户可以通过总线扩展接口连接自己开发的专用扩展板,以达到扩展实验和开发使用之目的。

图1 CVT-DSPIII型试验箱模块图

- 2 -

第二章 JXARM9-2410教学实验系统简介

二 功能单元介绍

1.主CPU模块(2407)功能单元 1) 并行数模转换(D/A)

精度:12bit 输出范围:0~5V 电压输出,建立时间1uS 2) PWM 输出

输出范围:0~5V 电压输出 3) 网络接口模块

主CPU(2407)扩展有CAN网接口和RS232 串口RS485 接口,可进行系统间的组网实验

4) EEPROM 接口

系统配有SPI接口的ROM硬件93C46 5) 外部存储器模块 128k-256k*16bit SRAM

主CPU 板由DSP320LF2407CPU 及扩展的128k*16bit SRAM,串行EEPROM 和复位线路等外围器件组成,如图2。

图2 主CPU模块图

2407CPU 板由3组双排插针P1-P3与实验平台相接,也可以直接应用于用户设计的系统板上。插针P1-P3引脚定义如下:

- 3 -

第二章 JXARM9-2410教学实验系统简介

2.外设接口功能单元 1) 显示模块

128x64 图形点阵液晶屏,6个发光数码管,6个发光二极管 2) 键盘输入模块4x4键盘 3) 电机控制模块

- 4 -

第二章 JXARM9-2410教学实验系统简介

电机控制模块自带一个直流电机和一个步进电机,利用电机控制模块, 通过主 CPU2407的PWM 输出可进行直流电机的控制实验 4) 双路模拟信号产生模块

模拟信号产生模块可产生两路频率和幅度可调的正弦波、三角波和方波,并可进行混叠以方便实验使用

5) HPI 接口单元模块

主CPU 2407 可以通过DSP5416 的HPI 接口读写C54X 的片内存贮器,完成并行数据交换,而不影响从机DSP5416 的运行。

3. IO空间地址分配

4.2407 程序地址空间分配 在MP/MC=0 时的地址分配

SRAM 地址空间分配 0X0000~0XFFFF FLASH 地址空间分配 0X0000~0X8000 5 2407 数据地址空间分配 在MP/MC=1 时的地址分配

SRAM 地址空间分配 0X0000~0XFFFF FLASH 地址空间分配 无效

- 5 -

第三章 实验项目

第三章 实验项目

实验项目一 CCS软件的使用

CCS 是TI 公司开发的一个集编辑、编译、调试等功能为一体的DSP 开发工具,我们本次实验通过一个简单的程序,来学习CCS 的基本使用方法。 一.实验目的

1.学习CCS软件C语言程序的开发调试流程。

2.学习使用CC’C2000调试TMS320LF2407 DSP程序。 二.实验内容

CC’C2000使用操作练习 三.实验操作练习 1. 系统连接

进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如图

PCI/USB/EPP 接口 1.1所示:

JTAG接口 计算机 仿真器 图1.1 实验系统连接图 实验箱 CPU板

2. 上电复位

在硬件安装完成后,确认安装正确、各实验部件及电源连接正常后,接通仿真器电源或启动计算机,此时,实验箱上的“红色指示灯”应点亮,否则DSP开发系统与计算机连接有问题。

3. 打开CCS软件,建立新工程,步骤如下:

3.1把C语言运行支持库加入到工程文件中并创建vector_c.asm

1)选择菜单Project中的New,创建新工程first,系统将自动在路径C:\\ti\\myprojects下生产目录first。

- 6 -

第三章 实验项目

2)选择菜单Project—Add files to Project,在弹出的对话框选择路径C:\\ti\\c2400\\cgtools\\lib下的库文件rts2xx.lib,单机“打开”按钮。将rts2xx.lib加入工程first中,如图1.2所示。

图1.2 rts2xx.lib加入后工程文件窗口

3)点击File—New—source file,创建中断向量表,输入以下内容:

;********************************************************************** ;文件名: vector_c.asm

;描述和说明: 'LF240x DSP 中断向量表 (C语言软件工程模板)

;**********************************************************************

.ref _c_int0 ;boot.obj中的C语言入口处 .ref _PHANTOM ;假中断向量 .sect \ ;以下代码为用户为中断向量表自定义的段 rsvect B _c_int0 ;复位向量,当系统复位,则从此处开始执行 int1 B _PHANTOM ;中断1,目前不启用,进入假中断后立即返回 int2 B _PHANTOM ;中断2,目前不启用,进入假中断后立即返回 int3 B _PHANTOM ;中断3,目前不启用,进入假中断后立即返回 int4 B _PHANTOM ;中断4,目前不启用,进入假中断后立即返回 int5 B _PHANTOM ;中断5,目前不启用,进入假中断后立即返回 int6 B _PHANTOM ;中断6,目前不启用,进入假中断后立即返回 ;中断7,保留 int8 B _PHANTOM ;中断8,用户自定义中断 int9 B _PHANTOM ;中断9,用户自定义中断 int10 B _PHANTOM ;中断10,用户自定义中断 int11 B _PHANTOM ;中断11,用户自定义中断

- 7 -

第三章 实验项目

int12 int13 int14 int15 int16 int17 int18 int20 int21 int22 int23 int24 int25 int26 int27 int28 int29 int30 int31

B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM B _PHANTOM ;中断12,用户自定义中断 ;中断13,用户自定义中断 ;中断14,用户自定义中断 ;中断15,用户自定义中断 ;中断16,用户自定义中断 ;中断17,TRAP ;中断18,NMI ;中断19,保留 ;中断20,用户自定义中断 ;中断21,用户自定义中断 ;中断22,用户自定义中断 ;中断23,用户自定义中断 ;中断24,用户自定义中断 ;中断25,用户自定义中断 ;中断26,用户自定义中断 ;中断27,用户自定义中断 ;中断28,用户自定义中断 ;中断29,用户自定义中断 ;中断30,用户自定义中断 ;中断31,用户自定义中断

4)将文件命名为vector_c.asm保存,之后,在工程管理器中把vector_c.asm加入到工程first中。

3.2 创建用于C语言环境下的cmd文件

1)窗口中File—New新建文件输入以下内容:

/********************************************************************* 文件名: LF2407A_C.cmd

描述和说明: 'LF240x CMD命令文件(C语言软件工程模板)

*********************************************************************/

/*----------------------------------------------------------------------*/ /* CMD命令文件 - 存储空间划分(LF2407A) */

/*----------------------------------------------------------------------*/

MEMORY { PAGE 0: VECS :origin = 0000h , length = 0040h /* 程序复位 */ PROG :origin = 00b0h , length = 7F50h /* 片内FLASH */ PAGE 1: B2: origin = 0060h , length = 0020h /* 内部双访问RAM,B2 块 */ B0B1: origin = 0200h , length = 0200h/* 内部双访问RAM,B0、B1合并块 */

- 8 -

第三章 实验项目

SARAM_IN:origin = 0800h , length = 0800h/* 内部单访问RAM,数据区 */ SARAM_EX:origin = 8000h , length = 8000h/* 外部扩展RAM,数据区 */ }

/*----------------------------------------------------------------------*/ /* CMD命令文件 - 程序段、数据段配置(LF2407A) */

/*----------------------------------------------------------------------*/

SECTIONS {

.vectors : { } > VECS PAGE 0 /* 指向自己定义的中断向量表 */ .text : { } > PROG PAGE 0 /* 程序代码 */ .cinit : { } > PROG PAGE 0 .switch : { } > PROG PAGE 0

.data : { } > SARAM_IN PAGE 1 /* 片内单访问RAM */ .bss : { } > SARAM_IN PAGE 1 /* 片内单访问RAM */ .const : { } > SARAM_IN PAGE 1 /* 片内单访问RAM */ .stack : { } > SARAM_IN PAGE 1 /* 堆栈,片内单访问RAM */ .sysmem : { } > SARAM_IN PAGE 1 /* 片内单访问RAM */ }

2)点击File—Save as,保存文件名为LF2407A_C.cmd,之后,在工程管理器中把LF2407A_C.cmd加入到工程first中。 3.3创建C语言头文件F2407REGS_c.h

窗口中新建文件输入附录1中的内容,并保存为F2407REGS_c.h文件。头文件

F2407REGS_c.h不需要自己添加到工程中。在main( )模块中,已包含该头文件,连接时,CCS会自动添加。 3.4 创建main()函数

1)点击File—New—Source File 输入以下内容:

/*********************************************************************** 文件名: main.c

描述和说明: main()函数是C程序的入口

***********************************************************************/ #include \ // 包含头文件math.h,因为sin函数在math.h中声明 #define N 32 // 每周期取32点 signed int Uab[N],Ubc[N]; // 被模拟电压Uab、Ubc unsigned int i;

main() { DSP2407_Initializing(); // DSP2407芯片初始化

- 9 -

第三章 实验项目

/****************************************************************/ /* 用sin库函数产生模拟电压信号(每周32点) */ /****************************************************************/ for (i=0;i

3.5创建DSP2407芯片初始化函数

通常,初始化函数包括以下几个方面

? DSP2407芯片初始化;

? 工程应用中所用到的片内外设初始化; ? 片内外存储器初始化; ? 应用系统硬件接口初始化。

DSP2407芯片级的初始化,是任何工程应用中不可缺少的。

1)新建Source file文件输入以下内容:

/********************************************************************** 文件名: DSP2407_Initializing() 描述和说明: DSP 2407芯片级初始化函数

**********************************************************************/

#include \

void DSP2407_Initializing() { asm(\ // 关总中断,INTM = 1 asm(\ // SXM置1,抑制符号扩展位 asm(\ // OVM清0,累加器中结果正常溢出 asm(\ // 可配置的片内双访问RAM块B0 // 被设置在数据空间 SCSR1=0x00FC; // 振荡器频率 CLKIN=10MHz, // 设置工作频率 CLKOUT=4*CLKIN=40MHz /* 0000,0000,1111,1100 =0x00FC 0~~~ ~~~~ ~~~~ ~~~~ [reserved] ~0~~ ~~~~ ~~~~ ~~~~ [CLKSRC] 选择CLKOUT引脚输出CPU时钟 ~~00 ~~~~ ~~~~ ~~~~ [LPM] CPU进入IDLE1(LMP0)模式

- 10 -

第三章 实验项目

~~~~ 000~ ~~~~ ~~~~ [PLL] CPU工作频率是输入的4倍频,4*10=40MHz ~~~~ ~~~0 ~~~~ ~~~~ [reserved] ~~~~ ~~~~ 1~~~ ~~~~ [ADC CLKEN] 1: ADC片内外设使能 ~~~~ ~~~~ ~1~~ ~~~~ [SCI CLKEN] 1: SCI片内外设使能 ~~~~ ~~~~ ~~1~ ~~~~ [SPI CLKEN] 1: SPI片内外设使能 ~~~~ ~~~~ ~~~1 ~~~~ [CAN CLKEN] 1: CAN片内外设使能 ~~~~ ~~~~ ~~~~ 1~~~ [EVB CLKEN] 1: EVB片内外设使能 ~~~~ ~~~~ ~~~~ ~1~~ [EVA CLKEN] 1: EVA片内外设使能 ~~~~ ~~~~ ~~~~ ~~0~ [resered] 0 ~~~~ ~~~~ ~~~~ ~~~0 [ILLADR] 无效地址检测位,用户仅读。 */ WDCR=0x0068; //关软件狗 /* 0000,0000,0110,1000 =0x0068 0000 0000 0~~~ ~~~~ [reserved] ~~~~ ~~~~ ~1~~ ~~~~ [WDDIS] Watchdog Disable:1,关软件狗 ~~~~ ~~~~ ~~1~ ~~~~ [WDCHK2] Watchdog Check Bit 2. 1:写该控制寄存器时该位应为1 ~~~~ ~~~~ ~~~0 ~~~~ [WDCHK1] Watchdog Check Bit 1. 0:写该控制寄存器时该位应为0 ~~~~ ~~~~ ~~~~ 1~~~ [WDCHK0] Watchdog Check Bit 0. 1:写该控制寄存器时该位应为1 ~~~~ ~~~~ ~~~~ ~000 [WDPS2-WDPS0]. Watchdog Prescale Select Bits.000:软件狗分频为1 */ IMR=0x003F; //开放所有CPU核级中断 /* 0000 0000 0011 1111 =0x003F 0000 0000 00~~ ~~~~ [reserved] 0000 0000 00 ~~~~ ~~~~ ~~1~ ~~~~ [INT6] 1: INT6中断开放 ~~~~ ~~~~ ~~~1 ~~~~ [INT5] 1: INT5中断开放 ~~~~ ~~~~ ~~~~ 1~~~ [INT4] 1: INT4中断开放 ~~~~ ~~~~ ~~~~ ~1~~ [INT3] 1: INT3中断开放 ~~~~ ~~~~ ~~~~ ~~1~ [INT2] 1: INT2中断开放 ~~~~ ~~~~ ~~~~ ~~~1 [INT1] 1: INT1中断开放 */ IFR=0x003F; // 向所有中断标志位写1,以清除所有中断请求 /* 0000 0000 0011 1111 =0x003F 0000 0000 00~~ ~~~~ [reserved] 0000 0000 00 ~~~~ ~~~~ ~~1~ ~~~~ [INT6] 1: 清除INT6中断请求 ~~~~ ~~~~ ~~~1 ~~~~ [INT5] 1: 清除INT5中断请求 ~~~~ ~~~~ ~~~~ 1~~~ [INT4] 1: 清除INT4中断请求 ~~~~ ~~~~ ~~~~ ~1~~ [INT3] 1: 清除INT3中断请求 ~~~~ ~~~~ ~~~~ ~~1~ [INT2] 1: 清除INT2中断请求 ~~~~ ~~~~ ~~~~ ~~~1 [INT1] 1: 清除INT1中断请求 */ }

2)将该文件保存为Initializing.c文件,并加入到first工作中。

- 11 -

第三章 实验项目

3.6 创建假中断处理函数

1)双击Initializing.c文件打开该模块,在该模块的源文件编辑窗口下面输入以下内容:

/********************************************************************** 文件名: PHANTOM()

描述和说明: 假中断函数。所有不需要的中断和错误中断都指向该函数。 *******************************************************************/ void interrupt PHANTOM(void) { static int phantom_count; phantom_count ++; return; }

2)再次保存文件Initializing.c。 3.7 软件调试

1)在工具栏上点击Incremental Build快捷键命令,进行编译和连接;

2)点击File—Load Program,在弹出的对话框中选择编译生成的first.out文件,如图1.3所示。

将文件下载到实验箱里进行程序的调试。CCS 提供了非常丰富的调试手段,比

较常见的如Step into、Step over、Step out,设置断点等可以通过相应的菜单或快捷键来实现,详细方法参见TI 的文档。

图1.3 下载生成的.out文件

- 12 -

第三章 实验项目

实验项目二 跑马灯实验

一.实验目的

1. 了解发光二极管在实际生活中的应用; 2. 学习并掌握DSP 外部IO 的使用;

3. 掌握发光二极管在DSP 系统中的控制方法。 二.实验内容

1. 编写程序从左到右逐个点亮发光二极管。 三.实验设备

1. CVT—DSP 实验箱、DSP 仿真器。 四.基础知识

1. 发光二极管介绍

发光二极管发明于20 世纪60 年代,在随后的数十年中,其基本用途是作为收录机等电子设备的指示灯。为了充分发挥发光二极管的照明潜力,近来,科学家开发出用于照明的新型发光二极管灯泡。这种灯泡具有效率高、寿命长的特点,可连续使用10 万小时,比普通白炽灯泡长100 倍。

发光二极管的显示原理非常简单,其核心部分是由p 型半导体和n 型半导体组成的晶片,在p 型半导体和n 型半导体之间有一个过渡层,称为p-n 结。在某些半导体材料的PN结中,注入的少数载流子与多数载流子复合时会把多余的能量以光的形式释放出来,从而把电能直接转换为光能。PN 结加反向电压,少数载流子难以注入,故不发光。这种利用注入式电致发光原理制作的二极管叫发光二极管,通称LED。 当它处于正向工作状态时(即两端加上正向电压),电流从LED 阳极流向阴极时,半导体晶体就发出从紫外到红外不同颜色的光线,光的强弱与电流有关。

2. LED 光源的特点

电压:LED 使用低压电源,供电电压在6-24V 之间,根据产品不同而异,所以它是一个比使用高压电源更安全的电源,特别适用于公共场所;

- 13 -

第三章 实验项目

效能:消耗能量较同光效的白炽灯减少80% ;

适用性:很小,每个单元LED 小片是3-5mm 的正方形,所以可以制备成各种形状的器件,并且适合于易变的环境 ;

稳定性:10 万小时,光衰为初始的50% ;

响应时间:其白炽灯的响应时间为毫秒级,LED 灯的响应时间为纳秒级 ; 对环境污染:无有害金属汞 ;

颜色:改变电流可以变色,发光二极管方便地通过化学修饰方法,调整材料的能带结构和带隙,实现红黄绿兰橙多色发光。如小电流时为红色的LED,随着电流的增加,可以依次变为橙色,黄色,最后为绿色 ;

价格:LED 的价格比较昂贵,较之于白炽灯,几只LED 的价格就可以与一只白炽灯的价格相当,而通常每组信号灯需由上300~500 只二极管构成。

3. DSP 控制LED 的方法

在CVT-DSP 教学系统中,使用了CPLD 来进行IO 操作,通过向地址8000H 单元写入逻辑1,使得在CPLD 的响应端口输出高电平,从而点亮发光二极管。 五.实验步骤

1 连接好DSP 开发系统,运行CCS 软件; 2 输入实验程序,运行并检查结果。 六.实验程序

- 14 -

第三章 实验项目

实验项目三 数码管显示实验

数码管是非常简单的显示设备,它通常用于一些状态或操作的显示。本实验将介绍数码管的显示原理及其实现办法。 一.实验目的

1. 了解数码管的显示原理; 2. 了解DSP 外设接口的控制方法。 二.实验内容

1. 编写程序显示“12345678” 三.实验设备

1. CVT—DSP 实验箱、DSP 仿真器。 四.基础知识

1. LED 显示原理

在一些应用系统中,为了便于人们观察和监视系统的运行情况,常常需要用显示器显示运行的中间结果及状态等信息,显示器是不可缺少的外部设备之一。显示器的种类很多,从液晶显示、发光二极管显示到CRT 显示器。在一些小型应用系统中采用发光二极管数码显示器已经足够,发光二极管数码显示器简称LED 显示器。LED 显示器具有耗电省、成本低廉、配置简单灵活、安装方便、耐振动、寿命长等优点。

7 段LED 由7 个发光二极管按“日”字形排列,所有发光二极管的阳极连在一起称共阳极接法,阴极连在一起称为共阴极接法。一般共阴极可以不需外接电阻,但共阳极接法中发光二极管必须外接电阻。LED 的结构及连接图见下图。

当选用共阴极的LED 显示器时,所有发光二极管的阴极连在一起接地,当某个

- 15 -

第三章 实验项目

发光二极管的阳极加入高电平时,对应的二极管点亮。因此要显示某字形就应使此字形的相应段的二极管点亮,也就是送一个用不同电平组合代表的数据字来控制LED 的显示,此数据称为字符的段码。字符0、1、2…F 与LED 段码A、B、C…F 以及DP(小数点)的关系如下表所示:

试验箱LED连接方式为共阳极。 2.LED 显示接口

LED 显示器的接口一般有静态显示与动态显示接口两种方式,下面分别加以介绍。

??态显示:LED 数码管采用静态接口时,共阴极或共阳极点连接在一起接地

C6H - 16 -

第三章 实验项目

或接高电平。每个显示位的段选线与一个8 位并行口线对应相连,只要在显示位上的段选线上保持段码电平不变,则该位就能保持相应的显示字符。这里的8 位并行口可以直接采用并行I/O 口,也可以采用串入/并出的移位寄存器或是其它具有三态功能的锁存器等。

??态显示:在多位LED 显示时,为了简化电路,降低成本,将所有位的段选线并联在一起,由一个8 位I/O 口控制。而共阴(或共阳)极公共端分别由相应的I/O 线控制,实现各位的分时选通。由于各个数码管是共用同一个段码输出口,分时轮流通电的,从而大大简化了硬件线路,降低了成本。不过这种方式的数码管接口电路中数码管不宜太多,一般在8个以内,否则每个数码管所分配的实际导通时间会太少,导致亮度不足。若LED 位数较多时应采用增加驱动能力,提高显示亮度。 五.实验步骤

1) 连接好DSP 开发系统,运行CCS软件; 2) 输入实验程序,运行并检查结果。

六.实验程序

- 17 -

附录1 F2407REGS.H文件

实验项目四 键盘接口实验

一.实验目的

1. 学习键盘接口的原理;

2. 掌握通过输入/输出端口扩展键盘的方法。 二.实验内容

1. 编写矩阵键盘扫描程序,并将按键值在数码管中显示。

三.实验设备

1. CVT—DSP 实验箱、DSP 仿真器。 四.基础知识

实验箱采用的4×4阵列键盘,按键分配的IO地址为0x800a与0x800b。0x800a对应按键的行,当1~4行有键按下时,0x800a分别对应的值为(0x07,0x0b,0x0d,0x0e)。0x800b对应按键的列,当给0x800b分别赋值(0x0e0,0x0d0,0x0b0,0x070)时,对应按键的1~4列。 五.实验步骤

1) 连接好DSP 开发系统,运行CCS软件; 2) 输入实验程序,运行并检查结果。 六.实验程序

- 18 -

附录1 F2407REGS.H文件

实验项目五 定时器与中断实验

一.实验目的

1. 熟悉LF2407的定时器; 2. 掌握LF2407定时器的控制方法; 3. 学会使用定时器中断方式控制程序流程。 二.实验内容

1. 编写定时器终端程序,并通过LED灯反映定时效果。

三.实验设备

1. CVT—DSP 实验箱、DSP 仿真器。 四.基础知识

(1)系统控制和状态寄存器1 SCSR1(地址7018h ) SCSR1= 0x00FC;

位14:CLOCKOUT输出引脚选择,0--输出CPU时钟;1--输出WDCLK 位13,12:低功耗模式选择:00--进入IDLE1模式;01:进入IDLE2模式 1x--进入HALT模式 位11-9:锁相环时钟预定标选择:000--4倍频 位7--2:功能模块使能:0:禁止;1:使能 位0无效地址检测

(2) 中断标志寄存器A(EVAIFRA)(742Fh)及屏蔽寄存器A(EVAIMRA) (742Ch)

- 19 -

附录1 F2407REGS.H文件

(3) 单个通用定时器控制寄存器TxCON(x=1,2,3,4) TxCON决定着定时器的操作模式 T1CON= 0x170C;

位12,11:计数模式选择:00--停止/保持;01--连续增/减计数;10--连续增计数★; 11--定向增/减计数。

位10-8--输入时钟定标:110--x/64,即64预分频 位7:保留

位6:定时器使能,0--禁止;1--使能

位5,4:时钟源选择:00--内部,01--外部;11--QEP

位3,2:定时器比较寄存器重载条件:00--计数器为0时重载;01--为0或等于周期寄存器时重载;10--立即重载;

位1:定时器比较使能:0--禁止;1--使能 T1PER即T1PR

五.实验步骤

1) 连接好DSP 开发系统,运行CCS软件; 2) 输入实验程序,运行并检查结果。 六.实验程序

- 20 -

附录1 F2407REGS.H文件

附录1 F2407REGS.H文件

/*************************************************************************

文件名: F2407REGS_c.h

描述和说明: LF2407A 片内外设寄存器定义 (C语言软件工程模板)

*************************************************************************/

/*--------------------------------------------------------------*/ /* 片内外设控制寄存器定义 */ /*--------------------------------------------------------------*/ #define IMR *((volatile unsigned int *)0x0004) /*中断屏蔽寄存器*/ #define IFR *((volatile unsigned int *)0x0006) /*中断标志寄存器*/ #define PIRQR0 *((volatile unsigned int *)0x7010) /* 外围中断请求寄存器0*/ #define PIRQR1 *((volatile unsigned int *)0x7011) /* 外围中断请求寄存器1*/ #define PIRQR2 *((volatile unsigned int *)0x7012) /* 外围中断请求寄存器2*/ #define PIACKR0 *((volatile unsigned int *)0x7014) /* 外围中断应答寄存器0*/ #define PIACKR1 *((volatile unsigned int *)0x7015) /* 外围中断应答寄存器1*/ #define PIACKR2 *((volatile unsigned int *)0x7016) /* 外围中断应答寄存器2*/ #define SCSR1 *((volatile unsigned int *)0x7018) /* 系统控制和状态寄存器1*/

#define SCSR2 *((volatile unsigned int *)0x7019) /* 系统控制和状态寄存器2*/

#define DIN *((volatile unsigned int *)0x701C) /*器件识别号寄存器*/ #define PVIR *((volatile unsigned int *)0x701E) /* 外围中断向量寄存器*/ /* 看门狗/ 实时中断(RTI)/ 锁相环 (PLL)寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define WDCNTR *((volatile unsigned int *)0x7023) /*看门狗计数寄存器*/ #define WDKEY *((volatile unsigned int *)0x7025) /* 看门狗 Key 寄存器*/

#define WDCR *((volatile unsigned int *)0x7029) /* 看门狗控制寄存器*/ /* 外围串行接口(SPI)寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define SPICCR *((volatile unsigned int *)0x7040) /* SPI配置控制寄存器1 */ #define SPICTL *((volatile unsigned int *)0x7041) /* SPI 运行控制寄存器2 */ #define SPISTS *((volatile unsigned int *)0x7042) /* SPI 状态寄存器 */

#define SPIBRR *((volatile unsigned int *)0x7044) /* SPI 波特率控制寄存器 */

#define SPIEMU *((volatile unsigned int *)0x7046) /* SPI 仿真缓冲寄存器 */

#define SPIRXBUF *((volatile unsigned int *)0x7047) /* SPI 串行输入缓冲寄存器 */

#define SPITXBUF *((volatile unsigned int *)0x7048) /* SPI 串行输出缓冲寄存器 */

- 21 -

附录1 F2407REGS.H文件

#define SPIDAT *((volatile unsigned int *)0x7049) /* SPI 串行数据寄存器 */ #define SPIPRI *((volatile unsigned int *)0x704F) /* SPI 优先级控制寄存器 */

/* 串行通信接口寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define SCICCR *((volatile unsigned int *)0x7050) /* SCI 通讯控制寄存器*/

#define SCICTL1 *((volatile unsigned int *)0x7051) /* SCI 控制寄存器1*/ #define SCIHBAUD *((volatile unsigned int *)0x7052) /* SCI 波特率控制寄存器高位*/

#define SCILBAUD *((volatile unsigned int *)0x7053) /* SCI 波特率控制寄存器低位*/

#define SCICTL2 *((volatile unsigned int *)0x7054) /* SCI 控制寄存器2*/ #define SCIRXST *((volatile unsigned int *)0x7055) /* SCI 接收状态寄存器*/

#define SCIRXEMU *((volatile unsigned int *)0x7056) /* SCI EMU 数据缓冲寄存器*/

#define SCIRXBUF *((volatile unsigned int *)0x7057) /* SCI 接收数据缓冲寄存器 */

#define SCITXBUF *((volatile unsigned int *)0x7059) /* SCI发送数据缓冲寄存器 */

#define SCIPRI *((volatile unsigned int *)0x705F) /* SCI 优先级控制寄存器 */ /* 外围中断配置寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define XINT1CR *((volatile unsigned int *)0x7070) /* Int1 配置寄存器*/ #define XINT2CR *((volatile unsigned int *)0x7071) /* Int2 配置寄存器*/ /* 数字 I/O 控制寄存器。~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define MCRA *((volatile unsigned int *)0x7090) /* I/O 复用控制寄存器A*/

#define MCRB *((volatile unsigned int *)0x7092) /* I/O 复用控制寄存器B*/

#define MCRC *((volatile unsigned int *)0x7094) /* I/O 复用控制寄存器C*/

#define PEDATDIR *((volatile unsigned int *)0x7095) /* I/O 端口 E 数据和方向控制寄存器*/

#define PFDATDIR *((volatile unsigned int *)0x7096) /* I/O 端口 F 数据和方向控制寄存器*/

#define PADATDIR *((volatile unsigned int *)0x7098) /* I/O 端口 A 数据和方向控制寄存器*/

#define PBDATDIR *((volatile unsigned int *)0x709A) /* I/O 端口 B 数据和方向控制寄存器*/

#define PCDATDIR *((volatile unsigned int *)0x709C) /* I/O 端口 C 数据和方向控制

- 22 -

附录1 F2407REGS.H文件

寄存器*/

#define PDDATDIR *((volatile unsigned int *)0x709E) /* I/O 端口 D 数据和方向控制寄存器*/

/* ADC 寄存器定义--------------------------------------------------------------*/

#define ADCTRL1 *((volatile unsigned int *)0x70A0) /* ADC控制寄存器1*/ #define ADCTRL2 *((volatile unsigned int *)0x70A1) /* ADC控制寄存器2*/ #define MAXCONV *((volatile unsigned int *)0x70A2) /*最大转换通道寄存器*/

#define CHSELSEQ1 *((volatile unsigned int *)0x70A3) /*通道选择域 :结果 3,2,1,0*/

#define CHSELSEQ2 *((volatile unsigned int *)0x70A4) /*通道选择域 :结果 7,6,5,4*/

#define CHSELSEQ3 *((volatile unsigned int *)0x70A5) /*通道选择域 :结果 11,10,9,8*/

#define CHSELSEQ4 *((volatile unsigned int *)0x70A6) /*通道选择域 :结果 15,14,13,12*/

#define AUTO_SEQ_SR *((volatile unsigned int *)0x70A7) /* 自动排序状态寄存器 */ #define RESULT0 *((volatile unsigned int *)0x70A8) /* 转换结果寄存器 0*/ #define RESULT1 *((volatile unsigned int *)0x70A9) /* 转换结果寄存器 1*/

#define RESULT2 *((volatile unsigned int *)0x70AA) /* 转换结果寄存器 2*/

#define RESULT3 *((volatile unsigned int *)0x70AB) /* 转换结果寄存器 3*/

#define RESULT4 *((volatile unsigned int *)0x70AC) /* 转换结果寄存器 4*/

#define RESULT5 *((volatile unsigned int *)0x70AD) /* 转换结果寄存器 5*/

#define RESULT6 *((volatile unsigned int *)0x70AE) /* 转换结果寄存器 6*/

#define RESULT7 *((volatile unsigned int *)0x70AF) /* 转换结果寄存器 7*/

#define RESULT8 *((volatile unsigned int *)0x70B0) /* 转换结果寄存器 8*/

#define RESULT9 *((volatile unsigned int *)0x70B1) /* 转换结果寄存器 9*/

#define RESULT10 *((volatile unsigned int *)0x70B2) /* 转换结果寄存器 10*/ #define RESULT11 *((volatile unsigned int *)0x70B3) /* 转换结果寄存器 11*/

#define RESULT12 *((volatile unsigned int *)0x70B4) /* 转换结果寄存器 12*/

#define RESULT13 *((volatile unsigned int *)0x70B5) /* 转换结果寄存器

- 23 -

附录1 F2407REGS.H文件

13*/

#define RESULT14 *((volatile unsigned int *)0x70B6) /* 转换结果寄存器 14*/

#define RESULT15 *((volatile unsigned int *)0x70B7) /* 转换结果寄存器 15*/

#define CALIBRATION *((volatile unsigned int *)0x70B8) /* 校准寄存器*/ /* 局部控制网络(CAN)寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define CANMDER *((volatile unsigned int *)0x7100) /* 邮包方向/使能寄存器*/

#define CANTCR *((volatile unsigned int *)0x7101) /* 发送控制寄存器*/ #define CANRCR *((volatile unsigned int *)0x7102) /* 接收控制寄存器*/

#define CANMCR *((volatile unsigned int *)0x7103) /* 主动控制寄存器*/

#define CANBCR2 *((volatile unsigned int *)0x7104) /* 位配置寄存器2*/ #define CANBCR1 *((volatile unsigned int *)0x7105) /* 位配置寄存器1*/ #define CANESR *((volatile unsigned int *)0x7106) /* 错误状态寄存器*/ #define CANGSR *((volatile unsigned int *)0x7107) /* 全局状态寄存器 */ #define CANCEC *((volatile unsigned int *)0x7108) /* CAN 错误计数寄存器*/

#define CANIFR *((volatile unsigned int *)0x7109) /* CAN 中断标志寄存器*/

#define CANIMR *((volatile unsigned int *)0x710A) /* CAN 中断屏蔽寄存器 */

#define CANLAM0H *((volatile unsigned int *)0x710B) /* 局部接收屏蔽寄存器0 高位*/

#define CANLAM0L *((volatile unsigned int *)0x710C) /* 局部接收屏蔽寄存器0 低位*/

#define CANLAM1H *((volatile unsigned int *)0x710D) /* 局部接收屏蔽寄存器1 高位*/

#define CANLAM1L *((volatile unsigned int *)0x710E) /* 局部接收屏蔽寄存器1 低位*/

#define CANMSGID0L *((volatile unsigned int *)0x7200) /* 对于邮包0的信息标志符 低位 */

#define CANMSGID0H *((volatile unsigned int *)0x7201) /* 对于邮包0的信息标志符 高位 */

#define CANMSGCTRL0*((volatile unsigned int *)0x7202) /*对于邮包0的信息控制域*/

#define CANMBX0A *((volatile unsigned int *)0x7204) /* 邮包0 A*/

- 24 -

附录1 F2407REGS.H文件

#define CANMBX0B *((volatile unsigned int *)0x7205) /* 邮包0 B*/ #define CANMBX0C *((volatile unsigned int *)0x7206) /* 邮包 0 C*/ #define CANMBX0D *((volatile unsigned int *)0x7207) /* 邮包 0 D*/ #define CANMSGID1L *((volatile unsigned int *)0x7208) /* 对于邮包1的信息标志符 低位 */

#define CANMSGID1H *((volatile unsigned int *)0x7209) /* 对于邮包1的信息标志符 高位 */

#define CANMSGCTRL1 *((volatile unsigned int *)0x720A) /*对于邮包1的信息控制域*/

#define CANMBX1A *((volatile unsigned int *)0x720C) /*邮包 1 A*/ #define CANMBX1B *((volatile unsigned int *)0x720D) /* 邮包 1 B*/ #define CANMBX1C *((volatile unsigned int *)0x720E) /* 邮包 1 C*/ #define CANMBX1D *((volatile unsigned int *)0x720F) /* 邮包 1 D*/ #define CANMSGID2L *((volatile unsigned int *)0x7210) /* 对于邮包2的信息标志符 低位 */

#define CANMSGID2H *((volatile unsigned int *)0x7211) /* 对于邮包2的信息标志符 高位 */

#define CANMSGCTRL2 *((volatile unsigned int *)0x7212) /*对于邮包2的信息控制域*/

#define CANMBX2A *((volatile unsigned int *)0x7214) /* 邮包 2 A*/ #define CANMBX2B *((volatile unsigned int *)0x7215) /*邮包2 B*/ #define CANMBX2C *((volatile unsigned int *)0x7216) /*邮包2 C*/ #define CANMBX2D *((volatile unsigned int *)0x7217) /*邮包2 D*/ #define CANMSGID3L *((volatile unsigned int *)0x7218) /* 对于邮包3的信息标志符 低位 */

#define CANMSGID3H *((volatile unsigned int *)0x7219) /* 对于邮包3的信息标志符 高位 */

#define CANMSGCTRL3 *((volatile unsigned int *)0x721A) /*对于邮包3的信息控制域*/

#define CANMBX3A *((volatile unsigned int *)0x721C) /* 邮包 3 A*/ #define CANMBX3B *((volatile unsigned int *)0x721D) /* 邮包 3 B*/ #define CANMBX3C *((volatile unsigned int *)0x721E) /* 邮包 3 C*/ #define CANMBX3D *((volatile unsigned int *)0x721F) /* 邮包 3 D*/ #define CANMSGID4L *((volatile unsigned int *)0x7220) /* 对于邮包4的信息标志符 低位 */

#define CANMSGID4H *((volatile unsigned int *)0x7221) /* 对于邮包4的信息标志

- 25 -

附录1 F2407REGS.H文件

符 高位 */

#define CANMSGCTRL4 *((volatile unsigned int *)0x7222) /*对于邮包4的信息控制域*/

#define CANMBX4A *((volatile unsigned int *)0x7224) /* 邮包 4 A*/ #define CANMBX4B *((volatile unsigned int *)0x7225) /* 邮包 4 B*/ #define CANMBX4C *((volatile unsigned int *)0x7226) /* 邮包 4 C*/ #define CANMBX4D *((volatile unsigned int *)0x7227) /* 邮包 4 D*/ #define CANMSGID5L *((volatile unsigned int *)0x7228) /* 对于邮包5的信息标志符 低位 */

#define CANMSGID5H *((volatile unsigned int *)0x7229) /* 对于邮包5的信息标志符 高位 */

#define CANMSGCTRL5 *((volatile unsigned int *)0x722A) /*对于邮包5的信息控制域*/

#define CANMBX5A *((volatile unsigned int *)0x722C) /* 邮包 5 A*/ #define CANMBX5B *((volatile unsigned int *)0x722D) /* 邮包 5 B*/ #define CANMBX5C *((volatile unsigned int *)0x722E) /* 邮包 5 C*/ #define CANMBX5D *((volatile unsigned int *)0x722F) /*邮包5 D*/

/* 事件管理器 (EV)/ 事件管理器 A (EVA)寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define GPTCONA *((volatile unsigned int *)0x7400) /* 通用定时器控制寄存器*/

#define T1CNT *((volatile unsigned int *)0x7401) /* T1 计数器*/ #define T1CMP *((volatile unsigned int *)0x7402) /* T1 比较值寄存器*/ #define T1PER *((volatile unsigned int *)0x7403) /* T1 周期寄存器*/ #define T1CON *((volatile unsigned int *)0x7404) /* T1 控制寄存器*/ #define T2CNT *((volatile unsigned int *)0x7405) /* T2 计数器*/ #define T2CMP *((volatile unsigned int *)0x7406) /* T2 比较值寄存器*/ #define T2PER *((volatile unsigned int *)0x7407) /* T2 周期寄存器*/ #define T2CON *((volatile unsigned int *)0x7408) /* T2 控制寄存器*/ #define COMCONA *((volatile unsigned int *)0x7411) /* 比较控制寄存器*/ #define ACTRA *((volatile unsigned int *)0x7413) /* 比较输出动作控制寄存器*/

#define DBTCONA *((volatile unsigned int *)0x7415) /* 死区控制寄存器*/ #define CMPR1 *((volatile unsigned int *)0x7417) /* 比较值1*/ #define CMPR2 *((volatile unsigned int *)0x7418) /* 比较值2*/ #define CMPR3 *((volatile unsigned int *)0x7419) /* 比较值3*/

#define CAPCONA *((volatile unsigned int *)0x7420) /* 捕捉控制寄存器*/ #define CAPFIFOA *((volatile unsigned int *)0x7422) /* 捕捉 FIFO A 状态寄存器*/

#define CAP1FIFO *((volatile unsigned int *)0x7423) /* 捕捉1 FIFO 顶部*/ #define CAP2FIFO *((volatile unsigned int *)0x7424) /* 捕捉 2 FIFO 顶部*/ #define CAP3FIFO *((volatile unsigned int *)0x7425) /* 捕捉 3 FIFO 顶部*/ #define CAP1FBOT *((volatile unsigned int *)0x7427) /* 捕捉 1 FIFO 底部

- 26 -

附录1 F2407REGS.H文件

*/

#define CAP2FBOT *((volatile unsigned int *)0x7428) /* 捕捉 2 FIFO 底部 */

#define CAP3FBOT *((volatile unsigned int *)0x7429) /* 捕捉 2 FIFO 底部 */

#define EVAIMRA *((volatile unsigned int *)0x742C) /* EVA 中断屏蔽寄存器 A*/

#define EVAIMRB *((volatile unsigned int *)0x742D) /* EVA中断屏蔽寄存器 B*/

#define EVAIMRC *((volatile unsigned int *)0x742E) /* EVA 中断屏蔽寄存器 C*/

#define EVAIFRA *((volatile unsigned int *)0x742F) /* EVA中断标志寄存器 A*/

#define EVAIFRB *((volatile unsigned int *)0x7430) /* EVA 中断标志寄存器 B*/

#define EVAIFRC *((volatile unsigned int *)0x7431) /* EVA中断标志寄存器 C*/ /* 事件管理器 B (EVB)寄存器 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/

#define GPTCONB *((volatile unsigned int *)0x7500) /*通用定时器控制寄存器*/

#define T3CNT *((volatile unsigned int *)0x7501) /* T3计数器*/ #define T3CMP *((volatile unsigned int *)0x7502) /* T3比较值寄存器*/ #define T3PER *((volatile unsigned int *)0x7503) /* T3周期寄存器*/ #define T3CON *((volatile unsigned int *)0x7504) /* T3控制寄存器*/ #define T4CNT *((volatile unsigned int *)0x7505) /* T4计数器*/ #define T4CMP *((volatile unsigned int *)0x7506) /* T4比较值寄存器*/ #define T4PER *((volatile unsigned int *)0x7507) /* T4周期寄存器*/ #define T4CON *((volatile unsigned int *)0x7508) /* T4控制寄存器*/ #define COMCONB *((volatile unsigned int *)0x7511) /*比较控制寄存器*/ #define ACTRB *((volatile unsigned int *)0x7513) /*比较输出动作控制寄存器*/

#define DBTCONB *((volatile unsigned int *)0x7515) /*死区控制寄存器*/ #define CMPR4 *((volatile unsigned int *)0x7517) /*比较值4*/ #define CMPR5 *((volatile unsigned int *)0x7518) /*比较值5*/ #define CMPR6 *((volatile unsigned int *)0x7519) /*比较值6*/

#define CAPCONB *((volatile unsigned int *)0x7520) /*捕捉控制寄存器*/ #define CAPFIFOB *((volatile unsigned int *)0x7522) /* 捕捉FIFO A 状态寄存器*/

#define CAP4FIFO *((volatile unsigned int *)0x7523) /* 捕捉 4 FIFO 顶部*/ #define CAP5FIFO *((volatile unsigned int *)0x7524) /* 捕捉 5 FIFO 顶部*/ #define CAP6FIFO *((volatile unsigned int *)0x7525) /* 捕捉 6 FIFO 顶部*/ #define CAP4FBOT *((volatile unsigned int *)0x7527) /* 捕捉 4 FIFO 底部*/ #define CAP5FBOT *((volatile unsigned int *)0x7528) /* 捕捉 5 FIFO 底部*/ #define CAP6FBOT *((volatile unsigned int *)0x7529) /* 捕捉 6 FIFO底部*/ #define EVBIMRA *((volatile unsigned int *)0x752C) /* EVB中断屏蔽寄存

- 27 -

附录1 F2407REGS.H文件

器A*/

#define EVBIMRB *((volatile unsigned int *)0x752D) /* EVB 中断屏蔽寄存器B*/

#define EVBIMRC *((volatile unsigned int *)0x752E) /* EVB 中断屏蔽寄存器 C*/

#define EVBIFRA *((volatile unsigned int *)0x752F) /* EVB 中断标志寄存器 A*/

#define EVBIFRB *((volatile unsigned int *)0x7530) /* EVB 中断标志寄存器 B*/

#define EVBIFRC *((volatile unsigned int *)0x7531) /* EVB 中断标志寄存器 C*/

/*-----------------------------------------------------------------------------*/ /* 常量的定义 */

/*-----------------------------------------------------------------------------*/ /* 数据空间 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define B2_SADDR 0x0060 /*块 B2 的开始地址*/ #define B2_EADDR 0x007F /*块 B2 的结束地址*/ #define B0_SADDR 0x0200 /*块 B0 的开始地址*/ #define B0_EADDR 0x02FF /*块 B0 的结束地址*/ #define B1_SADDR 0x0300 /*块 B1 的开始地址*/ #define B1_EADDR 0x03FF /*块 B1 的结束地址*/ #define SARAM 0x0800 /*SARAM 的开始地址(0800h-0FFFh)*/ #define EXTDATA 0x8000 /*外部的数据空间的开始地址*/

/* 经常用到的数据页 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define DP_B2 0 /*页 0 数据空间*/ #define DP_B01 4 /*页 4 B0(200H/80H)*/ #define DP_B02 5 /*页 5 B0(280H/80H)*/ #define DP_B11 6 /*页 6 B1(300H/80H)*/ #define DP_B12 7 /*页 7 B1(380H/80H)*/ #define DP_SARAM1 16 /*页 16 SARAM(800H/80H)*/

#define DP_PF1 224 /*页1 外设帧文件 (7000h/80h)(0XE0)*/ #define DP_PF2 225 /*页 2 外设帧文件 (7080h/80h)(0XE1)*/ #define DP_PF3 226 /*页 3 外设帧文件 (7100h/80h)(0XE2)*/ #define DP_PF4 227 /*页 4外设帧文件 (7180h/80h)(0XE3)*/ #define DP_PF5 228 /*页 5外设帧文件 (7200h/80h)(0XE4)*/ #define DP_EVA 232 /*EVA 寄存器文件 (7400h/80h)(0XE8)*/ #define DP_EVB 234 /*EVB 寄存器文件 (7500h/80h)(0XEA)*/ #define DP_EXT1 256 /*外部存储器的第一块(8000H/80H)*/ /* 位测试指令的位代码(BIT) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define BIT15 0 /*位代码 15*/ #define BIT14 1 /*位代码14*/ #define BIT13 2 /*位代码13*/ #define BIT12 3 /*位代码12*/ #define BIT11 4 /*位代码11*/

- 28 -

附录1 F2407REGS.H文件

#define BIT10 5 /*位代码10*/ #define BIT9 6 /*位代码9*/ #define BIT8 7 /*位代码8*/ #define BIT7 8 /*位代码7*/ #define BIT6 9 /*位代码6*/ #define BIT5 10 /*位代码5*/ #define BIT4 11 /*位代码4*/ #define BIT3 12 /*位代码3*/ #define BIT2 13 /*位代码2*/ #define BIT1 14 /*位代码1*/ #define BIT0 15 /*位代码0*/ /* 用SBIT0和SBIT1宏屏蔽位 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define B15_MSK 0x8000 /*位屏蔽15*/ #define B14_MSK 0x4000 /*位屏蔽14*/ #define B13_MSK 0x2000 /*位屏蔽13*/ #define B12_MSK 0x1000 /*位屏蔽12*/ #define B11_MSK 0x0800 /*位屏蔽11*/ #define B10_MSK 0x0400 /*位屏蔽10*/ #define B9_MSK 0x0200 /*位屏蔽9*/ #define B8_MSK 0x0100 /*位屏蔽8*/ #define B7_MSK 0x0080 /*位屏蔽7*/ #define B6_MSK 0x0040 /*位屏蔽6*/ #define B5_MSK 0x0020 /*位屏蔽5*/ #define B4_MSK 0x0010 /*位屏蔽4*/ #define B3_MSK 0x0008 /*位屏蔽3*/ #define B2_MSK 0x0004 /*位屏蔽2*/ #define B1_MSK 0x0002 /*位屏蔽1*/ #define B0_MSK 0x0001 /*位屏蔽0*/

/* 看门狗定时器复位字符串 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ #define wd_rst_1 0x0055 #define wd_rst_2 0x00AA

/*--------------------------------------------------------------------------*/ /* I/O 口空间映射寄存器 */

/*--------------------------------------------------------------------------*/ #define WSGR portffff ioport unsigned portffff;

#define FCMR portff0f ioport unsigned portff0f; ioport unsigned port0; ioport unsigned port1; ioport unsigned port2; ioport unsigned port3; ioport unsigned port4;

- 29 -

附录1 F2407REGS.H文件

#define DAC0 port0 #define DAC1 port1 #define DAC2 port2 #define DAC3 port3 #define DACL port4

- 30 -

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

Top