Int2GISR.c
资源名称:dlia_pro.rar [点击查看]
上传用户:inhuatv111
上传日期:2022-08-04
资源大小:292k
文件大小:3k
源码类别:
DSP编程
开发平台:
C/C++
- #include "regs2407.h"
- /*************************************************************************
- 文件名: interrupt INT2()
- 日期: 2007年02月8日
- 公司(作者):
- 描述和说明: CPU核级中断2(INT2)主服务程序
- *************************************************************************/
- ioport unsigned port0002; // 定义I/O口地址变量
- // 由于I/O空间只有一个设备AD7862
- // 所以AD7862地址可任意设,现设为0x0002
- #define AD7862_CS port0002 // 定义字符标识AD7862_CS等于I/O口地址0x0002
- extern unsigned int count_flag;
- extern unsigned int t1_count; // 全局变量,用于定时器中断计数
- signed int AD7862_U; // 存12位AD转换结果,后变为16位数
- signed int U_data_in[640]; // 40个周波AD采样数据缓冲区,为16位2的补码
- //signed int U_data_out[320];
- void interrupt INT2()
- {
- switch(PIVR) // 由外设中断向量寄存器PIVR判断
- { // 由哪个片内外设事件引起的中断
- case 0x0027: // 定时器1的0.625ms周期中断
- // 中断向量为0x0027
- T1CNT=0x00; // 定时器1的计数器重新赋0
- EVAIFRA=EVAIFRA&0x0080; // 清除定时器1周期中断标志,
- // 否则以后的中断将被忽略
- //asm(" CLRC INTM"); // 允许总中断 进入中断后省缺是关中断
- AD7862_U=AD7862_CS; // 读通道VA1转换结果,12位2的补码
- AD7862_U=AD7862_U & 0x0fff; // 12位2的补码转变为16位2的补码
- if (AD7862_U & 0x0800) //负数,补码扩展符号位
- {
- AD7862_U = AD7862_U | 0xf000;
- }
- U_data_in[t1_count]=AD7862_U; // 存入AD采样数据缓冲区
- // U_data_in[t1_count]= 2;
- if(PCDATDIR == 0xffff)
- {
- PCDATDIR = 0xff00;
- }
- else
- {
- PCDATDIR = 0xffff;
- }
- /* U_data_out[t1_count]=AD7862_CS;
- if (U_data_out[t1_count] & 0x0800)
- {
- U_data_out[t1_count]=U_data_out[t1_count]| 0xf000;
- }*/
- /*AD7862_U=AD7862_CS; // 读AD通道VA2转换结果
- if (AD7862_U & 0x0800) //负数,补码扩展符号位
- {
- AD7862_U = AD7862_U | 0xf000;
- }
- U_data_out[t1_count] = AD7862_U;*/
- t1_count++; // 定时器1中断次数加1
- if(t1_count==640)
- {
- t1_count=0; // 采40个周波后,计数复位,重新开始
- count_flag =1;
- }
- PFDATDIR = PFDATDIR&0xFFEF; // IOPF4输出低电平,为下次再次输出高电平作准备
- PFDATDIR = PFDATDIR|0x1010; // 为再次启动AD,输出高电平 (IOPF4) CONVST=1,
- // 形成启动AD所需的上升沿
- //asm(" CLRC INTM"); // 允许总中断
- break; // 返回
- default: // 其它结果
- break; // 返回
- }
- }