4235|8

1634

帖子

0

TA的资源

裸片初长成(高级)

楼主
 

利用板上自带按钮(PC4)做外部引脚中断,改变7个LED灯泡发光 [复制链接]

//利用板上自带按钮(PC4)做外部引脚中断,改变LED灯泡发光
//*****************************************************************************
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "debug.h"
#include "gpio.h"
#include "interrupt.h"
#include "sysctl.h"
//*****************************************************************************

unsigned char pc4_int_flag; //软件中断标志
//*****************************************************************************

#ifdef DEBUG
void __error__(char *pcFilename, unsigned long ulLine){}
#endif
//*****************************************************************************

void delay(unsigned long delay_clok)
{
  while(delay_clok)delay_clok--;
}
//*****************************************************************************

void GPIOCIntHandler(void)  //中断服务程序中
{
     delay(2000); //消除抖动
     while(GPIOPinRead(GPIO_PORTC_BASE, GPIO_PIN_4)==0)
     {
         GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,GPIO_PIN_5);
     }
     GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_5,~GPIO_PIN_5);
     GPIOPinIntClear(GPIO_PORTC_BASE, GPIO_PIN_4);//清除硬件中断标志,重要
     pc4_int_flag ^= 0x1;//软件中断标志取反,重要
     delay(2000); //消除抖动
}
//*****************************************************************************

int main(void) //主
{
    // 设置从晶振运行时钟不PLL
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);

    // 设置5个发光管引脚为输出
   SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB | SYSCTL_PERIPH_GPIOC | SYSCTL_PERIPH_GPIOD | SYSCTL_PERIPH_GPIOE);
   GPIOPinTypeGPIOOutput(GPIO_PORTB_BASE, GPIO_PIN_0 | GPIO_PIN_1);
   GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE, GPIO_PIN_5 );
   GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1);
   GPIOPinTypeGPIOOutput(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    // 设置按钮为输入引脚,作为外部引脚中断,下降沿触发
    GPIOPinTypeGPIOInput(GPIO_PORTC_BASE, GPIO_PIN_4);
    GPIOIntTypeSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_FALLING_EDGE);
    GPIOPinIntEnable(GPIO_PORTC_BASE, GPIO_PIN_4);
    IntEnable(INT_GPIOC);

    //软件中断标志清0
    pc4_int_flag = 0;

 //循环
    while(1)
    {
        IntEnable(INT_GPIOC);
        if(pc4_int_flag)
        {
            GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,GPIO_PIN_0);
            GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,~GPIO_PIN_0);
            GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,~GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,~GPIO_PIN_0);
        }
        else
        {
            GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_1,~GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTE_BASE, GPIO_PIN_0,~GPIO_PIN_0);
            GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_1,~GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTB_BASE, GPIO_PIN_0,GPIO_PIN_0);
            GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1,GPIO_PIN_1);
            GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_0,GPIO_PIN_0);
        }
    }
}

 

没注意到这个问题,编译时要用startup_rvmdk.S文件代替startup.S

startup_rvmdk.rar (2.08 KB, 下载次数: 10)

 

gpio_pc4_init.rar

1002 Bytes, 下载次数: 11

最新回复

不是说修S,是说编译时要用startup_rvmdk.S文件代替startup.S 就用后者就行  详情 回复 发表于 2011-6-21 14:25
 
点赞 关注

回复
举报

7230

帖子

195

TA的资源

五彩晶圆(高级)

沙发
 
学习学习 支持楼主
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

板凳
 

没注意到这个问题,编译时要用startup_rvmdk.S文件代替startup.S

 

 
 
 

回复

1万

帖子

16

TA的资源

版主

4
 

回复 板凳 xu__changhua 的帖子

不用也行
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1万

帖子

16

TA的资源

版主

5
 

楼主你的图怎么搞上去地

怎么就一个图
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

7230

帖子

195

TA的资源

五彩晶圆(高级)

6
 

回复 4楼 ddllxxrr 的帖子

不可以吧 我试过了 .s要修改的
 
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

7
 

原帖由 常见泽1 于 2011-6-14 09:49 发表 不可以吧 我试过了 .s要修改的

 

我只是试验了两个启动文件一个不能进入中断,另一个能,没有仔细分析,请问差别在哪里呢?

 
 
 

回复

1万

帖子

16

TA的资源

版主

8
 

回复 6楼 常见泽1 的帖子

不是说修S,是说编译时要用startup_rvmdk.S文件代替startup.S
就用后者就行
 
个人签名http://shop34182318.taobao.com/
https://shop436095304.taobao.com/?spm=a230r.7195193.1997079397.37.69fe60dfT705yr
 
 

回复

1634

帖子

0

TA的资源

裸片初长成(高级)

9
 

回复 板凳 xu__changhua 的帖子

弄明白为什么了,startup_rvmdk.S和startup.S区别是,因为这个startup_rvmdk.S里多了一行启动引脚中断的声明。startup.S是通用的,在没有引入中断时可以用,一旦需要引入某中断,需要在其内添加一行声明语句:EXTERN 中断号 即可。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表