在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > OK6410按鍵中斷點亮lED

            OK6410按鍵中斷點亮lED

            作者: 時間:2016-11-21 來源:網(wǎng)絡(luò) 收藏
            首先理清楚要準(zhǔn)備的幾個方面
            1.LED初始化
            2.按鍵初始化
            3.中斷初始化
            4.中斷處理程序
            首先初始化LED,以前說過了,不說
            按鍵初始化,這里既然要用到中斷,就不用傳統(tǒng)的延時消抖的辦法了,直接用中斷。
            只要把對應(yīng)的位設(shè)置成10,就是外部中斷了
            這里用XEINT0和XEINT5,有理由的,為什么選這兩個后面會說
            void button_init()
            {
            *(GPNCON)=0x802; //配置按鍵位外部中斷
            }
            接下來中斷初始化,一下說的比較清楚了,寄存器的名字直接在s3c6410里面查找就可以了,為什么選XEINT0和XEINT5的原因在注釋最長的那一行里面
            void init_irq()
            {
            //配置按鍵中斷下降沿觸發(fā)
            *(EINT0CON0)=0b010;
            //取消中斷屏蔽
            *(EINT0MASK)=0x0;
            //打開中斷
            *(VIC0INTENABLE)=0x3;
            *(VIC0VECTADDR0)=(int)k1_isr; //把中斷處理程序的地址寫入中斷向量表
            *(VIC0VECTADDR1)=(int)k2_isr; //注意external interrupt0和external interrupt1屬于同一個VIC0,使用同一個中斷向量地址,所以這里用XEINT1和XEINT5
            //設(shè)置cpsr寄存器使用向量方式中斷,打開總中斷
            __asm__(
            "mrc p15,0,r0,c1,c0,0n" //使用中斷向量表
            "orr r0,r0,#(1<<24)n"
            "mcr p15,0,r0,c1,c0,0n"
            "mrs r0,cpsrn"
            "bic r0, r0, #0x80n" //cpsr第7位清零,取消中斷不使能
            "msr cpsr_c, r0n"
            :
            :
            );
            }
            中斷處理程序
            void k1_isr()
            {
            //保存環(huán)境
            __asm__(
            "sub lr, lr, #4n"
            "stmfd sp!, {r0-r12, lr}n"
            :
            :
            );
            //中斷處理
            led_off();
            //清除中斷
            EXT_INT_0_PEND = ~0x0; //清除標(biāo)記 pend是中斷標(biāo)志位
            VIC0ADDRESS = 0; //把向量地址清零,方便下次用向量方式處理中斷
            VIC1ADDRESS = 0; //
            //恢復(fù)環(huán)境
            __asm__(
            "ldmfd sp!, {r0-r12, pc}^ n"
            :
            :
            );
            }
            OK6410里面我感覺中斷有一點比較特殊,就是可以采用向量方式處理中斷,這里就需要知道,先來個表格





            就是這個,這里可以看到,external interrupt0到external interrupt3共同屬于VIC0組,這樣它在使用向量方式時就會共用向量地址,所以在同時用external interrupt0和external interrupt1時就會出現(xiàn)external interrupt1的按鍵沒有用,就是因為向量地址被external interrupt0占用了,所以我用了external interrupt0和external interrupt5,external interrupt5屬于VIC1,向量地址在external interrupt0的向量地址的基礎(chǔ)上加4。
            This time can be OK


            關(guān)鍵詞: OK6410按鍵中斷點亮lE

            評論


            技術(shù)專區(qū)

            關(guān)閉