📄 target.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: target.c
**创 建 人: 陈明计
**最后修改日期: 2004年2月2日
**描 述: lpc21xx(飞利浦的ARM)目标板特殊的代码,包括异常处理程序和目标板初始化程序
** 每个工程应当具有这个文件的拷贝,用户根据程序的需要修改本文件。
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 陈明计
** 版 本: v1.0
** 日 期: 2004年2月2日
** 描 述: 原始版本
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#define IN_TARGET
#include "..\CGJ.H"
#include "..\i2c.h"
#include "..\control.h"
#include "..\IGBT.h"
#define RV_ENABLE 0x01 // 接收中断使能值
#define TX_ENABLE 0x02 // 发送中断使能值
#define T1CR0_INTERRUPT 0x10 // 捕获通道0中断标志位
#define T1CR1_INTERRUPT 0x20 // 捕获通道1中断标志位
#define T1MR0_INTERRUPT 0x01 // 匹配通道0中断标志位
#define T1MR1_INTERRUPT 0x02 // 匹配通道1中断标志位
#define T1MR2_INTERRUPT 0x04 // 匹配通道2中断标志位
#define PWM0_INTERRUPT 0x01 // PWM匹配通道0的中断标志
#define PWM1_INTERRUPT 0x02 // PWM匹配通道1的中断标志
/*********************************************************************************************************
** 函数名称: IRQ_Exception
** 功能描述: 中断异常处理程序,用户根据需要自己改变程序
**
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void IRQ_Exception(void)
{
while(1); // 这一句替换为自己的代码
}
/*********************************************************************************************************
** 函数名称: FIQ_Exception
** 功能描述: 快速中断异常处理程序,用户根据需要自己改变程序
**
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void FIQ_Exception(void)
{
while(1);
}
/*********************************************************************************************************
** 函数名称: Timer0_Exception
** 功能描述: 定时器0中断服务程序
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: OSTimeTick
**
** 作 者: 陈明计
** 日 期: 2004年2月2日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0_Exception(void)
{
T0IR = 0x01;
VICVectAddr = 0; // 通知中断控制器中断结束
OSTimeTick();
}
/*********************************************************************************************************
** 函数名称: Timer1_Exception
** 功能描述: 定时器1中断服务程序
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 饶阳胜
** 日 期: 2005年5月25日
**-------------------------------------------------------------------------------------------------------
** 修改人: 饶阳胜
** 日 期: 05-6-19
** 修改原因: 依据不同的中断源,做不同的处理
** 说 明: 有1个中断源:
** 1 速度脉冲输入捕获中断T1CR0
**
**------------------------------------------------------------------------------------------------------
** 修 改 人:周川福
** 日 期:2006-04-01
** 修改原因:改成IGBT方式控制涡流机输出
**------------------------------------------------------------------------------------------------------
** 修 改 人:周川福
** 日 期:2006-4-19
** 修改原因:Timer1只用来计速度信号,IGBT如果使用Timer1产生触发信号会有中断丢失的现象,因为速度捕获中断
** 太频繁
********************************************************************************************************/
void Timer1_Exception(void)
{
INT32U zc_t1cr0; // 这次t1cr0的值
INT32U i;
i = T1IR; // 获取中断源
if(i & T1CR0_INTERRUPT){ // 是捕获通道0中断,速度脉冲信号
++mcs; // 对速度脉冲信号加1
zc_t1cr0 = T1CR0; // 获取T1CR0值
if(zc_t1cr0 > sc_t1cr0){ // 计算上次脉冲周期
mczq += zc_t1cr0 - sc_t1cr0;
}else{
mczq += (0xFFFFFFFF - sc_t1cr0) + zc_t1cr0;
}
sc_t1cr0 = zc_t1cr0; // 刷新上次匹配值
T1IR = T1CR0_INTERRUPT; // 清除中断标识符
}
VICVectAddr = 0; // 中断退出
}
/*********************************************************************************************************
** 函数名称: PWM_Exception()
** 功能描述: PWM匹配中断处理函数,用来产生触发IGBT的控制信号
**
** 输 入 : 无
** 输 出 : 无
** 全局变量: 无
** 调用模块: IGBT_MR0_Handler()
** IGBT_MR1_Handler()
** 作 者: 周川福
** 日 期: 2006-4-19
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void PWM_Exception(void)
{
uint32 IntFlag;
IntFlag = PWMIR; // 读取中断标志
// PWM匹配中断PWMMR0,IGBT控制周期
if(IntFlag & PWM0_INTERRUPT){ // 匹配中断
IGBT_MR0_Handler();
PWMIR = PWM0_INTERRUPT; // 清除中断标识符
}
// PWM匹配中断PWMMR1,IGBT导通时间
else if(IntFlag & PWM1_INTERRUPT){
IGBT_MR1_Handler();
PWMIR = PWM1_INTERRUPT; // 清除中断标识符
}
VICVectAddr = 0; // 通知中断控制器中断结束
}
/*********************************************************************************************************
** 函数名称: Uart0_Exception
** 功能描述: 串口发送中断处理程序
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块:
**
** 作 者: 饶阳胜
** 日 期: 2005-5-26
**-------------------------------------------------------------------------------------------------------
** 修改人: 饶阳胜
** 日 期: 05-6-10
** 修改原因: 增加接收处理
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
/********************************************************************************************************
** 修改人: 饶阳胜
* 日 期: 05-6-11
* 修改原因: 按ESSB的要求改写
********************************************************************************************************/
void Uart0_Exception(void)
{
INT8U err, c;
switch(U0IIR & 0x0F){
case 0x02: // 是数据发送完成中断
c = CommGetTxChar(COMM1, &err); // 调用取发送缓冲区数函数
if(err != COMM_TX_EMPTY && err != COMM_BAD_CH){
U0THR = c; // 发送缓冲区中有数,将数送到发送寄存器
}else{
U0IER &= ~TX_ENABLE; // 发送缓冲区为空,关闭发送中断
}
break;
case 0x04: // 是数据接收中断
c = U0RBR; // 读取接收到的数据
CommPutRxChar(COMM1,c); // 将数据插到接收缓冲区中
break;
default:
break;
}
VICVectAddr = 0; // 通知中断控制器中断结束
}
/*********************************************************************************************************
** 函数名称: Timer0Init
** 功能描述: 定时器0初始化
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 陈明计
** 日 期: 2002年4月4日
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer0Init(void)
{
T0IR = 0xFFFFFFFF;
T0TC = 0;
T0TCR = 0x01;
T0MCR = 0x03;
T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
}
/*********************************************************************************************************
** 函数名称: Timer1Init
** 功能描述: 定时器1初始化
** 输 入: 无
**
** 输 出: 无
**
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 饶阳胜
** 日 期: 2005年5月22日
**-------------------------------------------------------------------------------------------------------
** 修改人: 饶阳胜
** 日 期: 05-6-19
** 说 明: 利用TMR1做3件事:
** 1 捕获通道0抓取速度脉冲信号,用于计算速度
** 2 捕获通道1抓取市电50Hz的周期信号,用于计算控制输出周期
** 3 匹配通道0,用于控制输出脉冲的宽度
** 4 但在初始化时,只打开第一项,用于测速度
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void Timer1Init(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -