在线时间0 小时
UID2007747
注册时间2013-5-6
NXP金币0
该用户从未签到
新手上路

- 积分
- 10
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2013-5-6 12:10:00
|
显示全部楼层
回复:【求助】mcf52259 pit和irq中断的问题求助
#include "support_common.h"
#include
#include "MCF52259.h"
#include "Counter_driver.h"
#include " IT_driver.h"
#include "UART_driver.h"
uint32 g_counter0=0,g_counter1=0;
void main(void)
{
uart0_init(9600);
// PIT0_init();
EPORT_init();
PIT0_init();
EnableInterrupts;
while(1)
{
;
}
}
void EPORT_init(void)
{
MCF_GPIO_PNQPAR = 0
|MCF_GPIO_PNQPAR_IRQ1_IRQ1
|MCF_GPIO_PNQPAR_IRQ3_IRQ3;
// |MCF_GPIO_PNQPAR_IRQ5_IRQ5
// |MCF_GPIO_PNQPAR_IRQ7_IRQ7;
//pin assignment register:FALLING LEVEL RISING BOTH
MCF_EPORT_EPPAR = MCF_EPORT_EPPAR_EPPA1_FALLING
|MCF_EPORT_EPPAR_EPPA3_FALLING; //下降沿捕捉
// |MCF_EPORT_EPPAR_EPPA5_FALLING
// |MCF_EPORT_EPPAR_EPPA7_FALLING;
//data direction register
MCF_EPORT_EPDDR = //0 输入0,输出 1
(uint8)~MCF_EPORT_EPDDR_EPDD1
&~MCF_EPORT_EPDDR_EPDD3
&~MCF_EPORT_EPDDR_EPDD5
&~MCF_EPORT_EPDDR_EPDD7;
//interrupt enable register
MCF_EPORT_EPIER = MCF_EPORT_EPIER_EPIE1 //EPORT interrupt source 1 中断使能
|MCF_EPORT_EPIER_EPIE3; //EPORT interrupt source 3
//|MCF_EPORT_EPIER_EPIE5 //EPORT interrupt source 5
// MCF_EPORT_EPIER_EPIE7;//EPORT interrupt source 7
//data register:hold the data to be driven to the pins
MCF_EPORT_EPDR = MCF_EPORT_EPDR_EPD1
|MCF_EPORT_EPDR_EPD3
|MCF_EPORT_EPDR_EPD5
|MCF_EPORT_EPDR_EPD7;
//data register:reflects the current state of the pins READ ONLY
// MCF_EPORT_EPPDR
//flag register:individually latches EPORT edge events
MCF_EPORT_EPFR = MCF_EPORT_EPFR_EPF1
|MCF_EPORT_EPFR_EPF2
|MCF_EPORT_EPFR_EPF3
|MCF_EPORT_EPFR_EPF4
|MCF_EPORT_EPFR_EPF5
|MCF_EPORT_EPFR_EPF6
|MCF_EPORT_EPFR_EPF7;
//set interrupt enable
// ~MCF_INTC_IMRL_MASKALL;
MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL
&~MCF_INTC_IMRL_INT_MASK1 //EPORT interrupt source 1
&~MCF_INTC_IMRL_INT_MASK3 //EPORT interrupt source 3
&~MCF_INTC_IMRL_INT_MASK5 //EPORT interrupt source 5
&~MCF_INTC_IMRL_INT_MASK7;//EPORT interrupt source 7
MCF_INTC0_ICR01=MCF_INTC_ICR_IP(4)+MCF_INTC_ICR_IL(5);
MCF_INTC0_ICR03=MCF_INTC_ICR_IP(5)+MCF_INTC_ICR_IL(5);
MCF_INTC0_ICR05=MCF_INTC_ICR_IP(3)+MCF_INTC_ICR_IL(5);
MCF_INTC0_ICR07=MCF_INTC_ICR_IP(4)+MCF_INTC_ICR_IL(5);
}
__declspec(interrupt:0) void EPORT_irq1_handler(void)//source 1 65
{
MCF_EPORT_EPFR|=MCF_EPORT_EPFR_EPF1;
g_counter0++;
uart0_printf_16("irq_hander_R_couter_number=",g_counter0);
uart0_putchar('\r');
uart0_putchar('\n');
}
__declspec(interrupt:0) void EPORT_irq3_handler(void) //67
{
MCF_EPORT_EPFR|=MCF_EPORT_EPFR_EPF3;
g_counter1++;
uart0_printf_16("irq_hander_L_couter_number=",g_counter1);
uart0_putchar('\r');
uart0_putchar('\n');
}
void PIT0_init(void)
{
MCF_PIT0_PCSR = 0
|MCF_PIT_PCSR_PRE(3) // 分频8(对内部时钟进行分频)
|MCF_PIT_PCSR_OVW // 立即替换,重装设定计数值
|MCF_PIT_PCSR_PIE // 中断使能
|MCF_PIT_PCSR_PIF // 中断标志清零
|MCF_PIT_PCSR_RLD; // 达到0x0000,重装设定值
MCF_PIT0_PMR = 5000; // 100ms 设定值,4,000,000/8=500,000
MCF_PIT0_PCSR |= MCF_PIT_PCSR_EN; // 使能模块
MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL;
// MCF_INTC0_IMRL&=~MCF_INTC_IMRL_MASKALL
// &~MCF_INTC_IMRL_INT_MASK1 //EPORT interrupt source 1
// &~MCF_INTC_IMRL_INT_MASK3 //EPORT interrupt source 3
// &~MCF_INTC_IMRL_INT_MASK5 //EPORT interrupt source 5
// &~MCF_INTC_IMRL_INT_MASK7;//EPORT interrupt source 7
MCF_INTC0_IMRH&=~MCF_INTC_IMRH_INT_MASK55;// 中断管理中使能定时中断
MCF_INTC0_ICR55=0
| MCF_INTC_ICR_IL(3) // 设置中断优先级
| MCF_INTC_ICR_IP(4);
}
__declspec(interrupt:0) void PIT0_handler(void)// 119=55+64
{
uint32 couter_number_L,couter_number_R;
couter_number_R=g_counter0;
couter_number_L=g_counter1;
g_counter0=0;
g_counter1=0;
if(couter_number_R==0&&couter_number_L==0)
{
}
else
{
uart0_printf_16("couter_number_R=", couter_number_R);
uart0_printf_16(" couter_number_L=",couter_number_L);
uart0_putchar('\r');
uart0_putchar('\n');
uart0_putchar('\r');
uart0_putchar('\n');
}
} |
|