主题 : s5pv210平台下如何申请GPIOINT(All other GPIO interrupt mux)中断? 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 31825
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2010-11-05
最后登录: 2015-05-16
楼主  发表于: 2014-10-12 16:13

 s5pv210平台下如何申请GPIOINT(All other GPIO interrupt mux)中断?

如能提供测试代码, 感激不尽
级别: 新手上路
UID: 31825
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2010-11-05
最后登录: 2015-05-16
1楼  发表于: 2014-10-12 18:30
说用request_irq()的就不要来了
级别: 论坛版主
UID: 103400
精华: 0
发帖: 434
金钱: 2235 两
威望: 447 点
综合积分: 868 分
注册时间: 2014-04-24
最后登录: 2016-10-10
2楼  发表于: 2014-10-13 10:26
#include "int.h"
#include "stdio.h"

#define        PWMTIMER_BASE            (0xE2500000)

#define        TCFG0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x00)) )
#define        TCFG1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x04)) )
#define        TCON          ( *((volatile unsigned long *)(PWMTIMER_BASE+0x08)) )
#define        TCNTB0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x0C)) )
#define        TCMPB0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x10)) )
#define        TCNTO0        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x14)) )
#define        TCNTB1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x18)) )
#define        TCMPB1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x1C)) )
#define        TCNTO1        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x20)) )
#define        TCNTB2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x24)) )
#define        TCMPB2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x28)) )
#define        TCNTO2        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x2C)) )
#define        TCNTB3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x30)) )
#define        TCMPB3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x34)) )
#define        TCNTO3        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x38)) )
#define        TCNTB4        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x3C)) )
#define        TCNTO4        ( *((volatile unsigned long *)(PWMTIMER_BASE+0x40)) )
#define        TINT_CSTAT     ( *((volatile unsigned long *)(PWMTIMER_BASE+0x44)) )

void pwm_stopall(void);
void timer_request(void);
void irq_handler(void);
void timer_init(unsigned long utimer,unsigned long uprescaler,unsigned long udivider,unsigned long utcntb,unsigned long utcmpb);
void irs_timer();


// 用于记录中断发生的次数
int counter;


void timer_request(void)
{
    printf("\r\n#############Timer test############\r\n");

    // 禁止所有timer
    pwm_stopall();                                

    counter = 0;

    // 设置timer0中断的中断处理函数
    intc_setvectaddr(NUM_TIMER0,irs_timer);    
    
    // 使能timer0中断
    intc_enable(NUM_TIMER0);
    
    // 设置timer0
    timer_init(0,65,4,62500,0);        
}

// 停止所有timer
void pwm_stopall(void)
{
    TCON = 0;
}


// timer0中断的中断处理函数
void irs_timer()
{
    unsigned long uTmp;


    //清timer0的中断状态寄存器
    uTmp = TINT_CSTAT;
    TINT_CSTAT = uTmp;      
    
    // 打印中断发生次数
    printf("Timer0IntCounter = %d \r\n",counter++);
    
    // vic相关的中断清除
    intc_clearvectaddr();
}

void timer_init(unsigned long utimer,unsigned long uprescaler,unsigned long udivider,unsigned long utcntb,unsigned long utcmpb)
{
    unsigned long temp0;

    // 定时器的输入时钟 = PCLK / ( {prescaler value + 1} ) / {divider value} = PCLK/(65+1)/16=62500hz

    //设置预分频系数为66
    temp0 = TCFG0;
    temp0 = (temp0 & (~(0xff00ff))) | ((uprescaler-1)<<0);
    TCFG0 = temp0;

    // 16分频
    temp0 = TCFG1;
    temp0 = (temp0 & (~(0xf<<4*utimer))& (~(1<<20))) |(udivider<<4*utimer);
    TCFG1 = temp0;

    // 1s = 62500hz
    TCNTB0 = utcntb;
    TCMPB0 = utcmpb;

    // 手动更新
    TCON |= 1<<1;

    // 清手动更新位
    TCON &= ~(1<<1);

    // 自动加载和启动timer0
    TCON |= (1<<0)|(1<<3);

    // 使能timer0中断
    temp0 = TINT_CSTAT;
    temp0 = (temp0 & (~(1<<utimer)))|(1<<(utimer));
    TINT_CSTAT = temp0;
}
级别: 新手上路
UID: 31825
精华: 0
发帖: 25
金钱: 125 两
威望: 25 点
综合积分: 50 分
注册时间: 2010-11-05
最后登录: 2015-05-16
3楼  发表于: 2014-10-13 12:02

 回 2楼(嘉jjm) 的帖子

(ARM9之家论坛->Linux技术交流区->s5pv210平台下如何申请GPIOINT(All other GPIO interrupt mux)中断? )
求linux下的GPIOINT中断申请函数!
级别: 论坛版主
UID: 103400
精华: 0
发帖: 434
金钱: 2235 两
威望: 447 点
综合积分: 868 分
注册时间: 2014-04-24
最后登录: 2016-10-10
4楼  发表于: 2014-10-14 10:12
这个只是给你例子作为参考而已