注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
肖是的个人空间 https://home.eeworld.com.cn/space-uid-532600.html [收藏] [复制] [分享] [RSS]
日志

Tiva c GPIO中断问题

已有 2376 次阅读2014-8-11 10:30

#include <stdbool.h>
#include <stdint.h>

#include "Key_Board.h"
#include "Nokia5110.h"
#include "SystemInit.h"

#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/interrupt.h"
#include "driverlib/timer.h"

#include "inc/hw_timer.h"
#include "inc/hw_ints.h"
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "inc/hw_gpio.h"
#include "inc/hw_sysctl.h"

unsigned char num;                                //&Oacute;&Atilde;&Agrave;&acute;&Iuml;&Ocirc;&Ecirc;&frac34;×&Ouml;·&ucirc;&frac14;&AElig;&Ecirc;&yacute;
unsigned char Int_flag=1; //&Ouml;&ETH;&para;&Iuml;±ê&Ouml;&frac34;&Icirc;&raquo;
unsigned char num2=0;                        //&cedil;&ordm;&Ocirc;&eth;&para;&Ocirc;&Ecirc;&auml;&Egrave;&euml;&micro;&Auml;&frac14;&AElig;&Ecirc;&yacute;
unsigned char key_val=88;        //&Ecirc;&auml;&Egrave;&euml;&micro;&Auml;&Ouml;&micro;&sup3;&otilde;&Ecirc;&frac14;&Eacute;è&Ouml;&Atilde;
unsigned char in_put_end_flag=0;//&Ecirc;&auml;&Egrave;&euml;&frac12;á&Ecirc;&oslash;±ê&Ouml;&frac34;
unsigned char keyinput_val[]="A321B654C987DE0F";
unsigned char input[32];//&Ecirc;&auml;&Egrave;&euml;&micro;&Auml;&Ograve;&ordf;&Iuml;&Ocirc;&Ecirc;&frac34;&micro;&Auml;&Ecirc;&yacute;×é

/*********************************************************************************************************
** Function name:       GPIO_Port_F_ISR
** Descriptions:        GPIOF&micro;&Auml;&Ouml;&ETH;&para;&Iuml;·&thorn;&Icirc;&ntilde;&ordm;&macr;&Ecirc;&yacute;
** input parameters:    &Icirc;&THORN;
** output parameters:   &Icirc;&THORN;
** Returned value:      &Icirc;&THORN;
*********************************************************************************************************/
void GPIO_Port_F_ISR(void)
{
        unsigned long ulStatus;
        unsigned char K_In;
       
        K_In=0x80;       
        SysCtlDelay(5*(TheSysClock/ 3000));          //&Iuml;&ucirc;&para;&para;
        ulStatus=GPIOIntStatus(KEY_PORTF,true); // &para;&Aacute;&Egrave;&iexcl;&Ouml;&ETH;&para;&Iuml;×&acute;&Igrave;&not;
        GPIOIntClear(KEY_PORTF, ulStatus); // &Ccedil;&aring;&sup3;&yacute;&Ouml;&ETH;&para;&Iuml;×&acute;&Igrave;&not;&pound;&not;&Ouml;&Oslash;&Ograve;&ordf;
        if (ulStatus&KEY_PIN_L)                                 //&Egrave;&ccedil;&sup1;&ucirc;KEY_L&micro;&Auml;&Ouml;&ETH;&para;&Iuml;×&acute;&Igrave;&not;&Oacute;&ETH;&ETH;§
        {
                SysCtlDelay(5*(TheSysClock/ 3000)); // &Ntilde;&Oacute;&Ecirc;±&Ocirc;&frac14;10ms&pound;&not;&Iuml;&ucirc;&sup3;&yacute;&Euml;&Eacute;&frac14;ü&para;&para;&para;&macr;
                key_val=KeyIn(K_In);        //&para;&Aacute;&Egrave;&iexcl;°&acute;&frac14;ü&Ouml;&micro;       
                KeyChecKend();//&frac14;ì&sup2;é°&acute;&frac14;ü&frac12;á&Ecirc;&oslash;
        }
        Int_flag=0;       
        Nokia5110_DisNumber(0,5,key_val);
}

void Key_IntInit(void)
{
        /*&cedil;&szlig;4&Icirc;&raquo;KEY_PIN_H&Aring;&auml;&Ouml;&Atilde;*/
        {
                /*KEY_PIN_H&Ecirc;&sup1;&Auml;&Uuml;*/
                SysCtlPeripheralEnable(KEY_PERIPH_GPIOC);  //&cedil;&szlig;4&Icirc;&raquo;&Ecirc;&sup1;&Auml;&Uuml;
               
                /*&cedil;&szlig;4&Icirc;&raquo;KEY_PIN_H&Auml;&pound;&Ecirc;&frac12;*/
//                GPIOPinTypeGPIOOutput(KEY_PORTC,KEY_PIN_H);//&cedil;&szlig;4&Icirc;&ordf;&Ecirc;&auml;&sup3;&ouml;
//                GPIOPinWrite(KEY_PORTC,KEY_PIN_H,0x00);  //&cedil;&szlig;4&Icirc;&raquo;&Ecirc;&auml;&sup3;&ouml;0
               
                GPIODirModeSet(KEY_PORTC, KEY_PIN_H, GPIO_DIR_MODE_OUT);
    GPIOPadConfigSet(KEY_PORTC, KEY_PIN_H,                       
                     GPIO_STRENGTH_4MA,                     
                     GPIO_PIN_TYPE_STD);
                GPIOPinWrite(KEY_PORTC,KEY_PIN_H,0x00);  //&cedil;&szlig;4&Icirc;&raquo;&Ecirc;&auml;&sup3;&ouml;0
        }
        /*&micro;&Iacute;4&Icirc;&raquo;&Ouml;&ETH;&para;&Iuml;&Ecirc;&auml;&Egrave;&euml;&Eacute;è&Ouml;&Atilde;*/
        {
                /*&Ecirc;&sup1;&Auml;&Uuml;KEY_PIN_L&Euml;ù&Ocirc;&Uacute;GPIO&para;&Euml;&iquest;&Uacute;*/
                SysCtlPeripheralEnable(KEY_PERIPH_GPIOF); //&micro;&Iacute;4&Icirc;&raquo;&Ecirc;&sup1;&Auml;&Uuml;
                HWREG(GPIO_PORTF_BASE + GPIO_O_LOCK) = 0x4c4f434b; //&frac12;&acirc;&Euml;&oslash;PF0      
    HWREG(GPIO_PORTF_BASE + GPIO_O_CR) = GPIO_PIN_0;        

                /*&Eacute;è&Ouml;&Atilde;KEY_PIN_L&Euml;ù&Ocirc;&Uacute;GPIO&para;&Euml;&iquest;&Uacute;&Ecirc;&auml;&Egrave;&euml;&Auml;&pound;&Ecirc;&frac12;*/
                //GPIOPinTypeGPIOInput(KEY_PORTF,KEY_PIN_L);//&micro;&Iacute;4&Icirc;&raquo;&Ecirc;&auml;&Egrave;&euml;
                GPIOPadConfigSet(GPIO_PORTF_BASE,KEY_PIN_L,GPIO_STRENGTH_2MA, GPIO_PIN_TYPE_STD_WPU);
    GPIODirModeSet(GPIO_PORTF_BASE,KEY_PIN_L, GPIO_DIR_MODE_IN);
               
                /*&Eacute;è&Ouml;&Atilde;KEY_PIN_L&Ouml;&ETH;&para;&Iuml;&Agrave;à&ETH;&Iacute;*/
                GPIOIntTypeSet(KEY_PORTF,KEY_PIN_L,GPIO_FALLING_EDGE);//&micro;&Iacute;4&Icirc;&raquo;&Iuml;&Acirc;&frac12;&micro;&Ntilde;&Oslash;&acute;&yen;·&cent;&Ouml;&ETH;&para;&Iuml;
                //IntPrioritySet(INT_GPIOF, 1 << 5); // &Eacute;è&Ouml;&Atilde;KEY&Ouml;&ETH;&para;&Iuml;&Oacute;&Aring;&Iuml;&Egrave;&frac14;&para;&Icirc;&ordf;1
               
                /*×&cent;&sup2;á&Ouml;&ETH;&para;&Iuml;*/
                GPIOIntRegister(KEY_PORTF,GPIO_Port_F_ISR);
       
                /*&Ouml;&ETH;&para;&Iuml;&Aring;&auml;&Ouml;&Atilde;*/
                GPIOIntEnable(KEY_PORTF,KEY_PIN_L);//&micro;&Iacute;4&Icirc;&raquo;&Ouml;&ETH;&para;&Iuml;&Ecirc;&auml;&Egrave;&euml;&Ecirc;&sup1;&Auml;&Uuml;       
                IntEnable(INT_GPIOF);
        }
}
/*********************************************************************************************************
** Function name:       Keycheckend
** Descriptions:        &frac14;ì&sup2;é°&acute;&frac14;ü&frac12;á&Ecirc;&oslash;
** input parameters:    &Icirc;&THORN;
** output parameters:   &Icirc;&THORN;
** Returned value:      &Icirc;&THORN;
*********************************************************************************************************/
void KeyChecKend(void)
{
        SysCtlDelay(10 * (TheSysClock/ 3000)); // &Ntilde;&Oacute;&Ecirc;±&Ocirc;&frac14;10ms&pound;&not;&Iuml;&ucirc;&sup3;&yacute;°&acute;&frac14;ü&para;&para;&para;&macr;
        while (GPIOPinRead(KEY_PORTF,KEY_PIN_L) == 0x00); // &micro;&Egrave;&acute;&yacute;KEY&Igrave;§&AElig;&eth;
        SysCtlDelay(10*(TheSysClock/ 3000)); // &Ntilde;&Oacute;&Ecirc;±&Ocirc;&frac14;10ms&pound;&not;&Iuml;&ucirc;&sup3;&yacute;&Euml;&Eacute;&frac14;ü&para;&para;&para;&macr;
}
/*********************************************************************************************************
** Function name:       KeyIn
** Descriptions:       °&acute;&frac14;ü&Ouml;&micro;&frac14;ì&sup2;&acirc;&Auml;&pound;&iquest;é
** input parameters:    &Icirc;&THORN;
** output parameters:   &frac14;ì&sup2;&acirc;&micro;&frac12;&micro;&Auml;&frac14;ü&Aring;&Igrave;&Ecirc;&auml;&Egrave;&euml;&Ouml;&micro; key_val
** Returned value:      &Icirc;&THORN;
*********************************************************************************************************/
unsigned char KeyIn(unsigned char K_In)         
{
                unsigned char keyH_out;
                unsigned char temp1;
                unsigned char row;
                unsigned char col;
                unsigned char pinStatus;
       
                for(row=0;row<4;row++)
                {
                        keyH_out=0xF0;
                        keyH_out-=K_In;
                        K_In>>=1;
                        GPIOPinWrite(KEY_PORTC, KEY_PIN_H,keyH_out);
                        pinStatus=GPIOPinRead(KEY_PORTF,KEY_PIN_L);
                        if((pinStatus&0x0f)<0x0f)
                        {
                                temp1=0x01;
                                for(col=0;col<4;col++)
                                {
                                        if((pinStatus&temp1)==0x00)
                                        {
                                                key_val=col+row*4;                                               
                                        }
                                        temp1<<=1;
                                }
                        }                               
                }
                GPIOPinWrite(KEY_PORTC, KEY_PIN_H,0x00);
                return         key_val;               
}

//&Ouml;÷&ordm;&macr;&Ecirc;&yacute;&pound;¨&sup3;&Igrave;&ETH;ò&Egrave;&euml;&iquest;&Uacute;&pound;&copy;

int main(void)
{
        SysCtlClockSet(SYSCTL_SYSDIV_4 |
                                                                 SYSCTL_USE_PLL  |
                                                                 SYSCTL_OSC_MAIN |
                                                                 SYSCTL_XTAL_16MHZ);//&Aring;&auml;&Ouml;&Atilde;&Icirc;&ordf;PLL 4·&Ouml;&AElig;&micro;&pound;&not;&Iacute;&acirc;&sup2;&iquest;16Mhz&frac34;§&Otilde;&ntilde;&pound;&not;&Ocirc;ò&Iuml;&micro;&Iacute;&sup3;&Ecirc;±&Ouml;&Oacute;&Icirc;&ordf;200Mhz/4=50Mhz
        Nokia5110_Init();    //&Ograve;&ordm;&frac34;§&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        Key_IntInit(); // KEY&Ouml;&ETH;&para;&Iuml;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;
        IntMasterEnable(); // &Ecirc;&sup1;&Auml;&Uuml;&acute;&brvbar;&Agrave;í&AElig;÷&Ouml;&ETH;&para;&Iuml;
       
        while(1)
        {
                Nokia5110_DisNumber(0,0,key_val);
                Nokia5110_DisNumber(0,1,1);
        }
//        while(1) // &micro;&Egrave;&acute;&yacute;°&acute;&frac14;ü&Ouml;&ETH;&para;&Iuml;
//        {
//                Nokia5110_DisNumber(0,5,key_val+1);
//                if(Int_flag==0)
//                {
//                        Nokia5110_DisNumber(0,3,Int_flag);
//                        Nokia5110_DisNumber(0,2,Int_flag);
//                  if(key_val<15&&(key_val>0|| key_val==0))
//                        {
//                                Nokia5110_DisNumber(0,0,key_val);
//                                input[num2]=keyinput_val[key_val];
//                        }
//                        Int_flag=1;
//                        num2++;
//                        if(key_val==0x0F)
//                        {
//                                num2=0;
//                    Nokia5110_Dis6x8(0,0,input);
//                        }
//                 }
//        }
}       

上面程序为什么出不了中断函数,进入中断后就出不来l!

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章