久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1778|回復: 1
打印 上一主題 下一主題
收起左側

求指導ARM Cortex A9 實驗,按鍵計數器和串口終端命令控制器,根據給的代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:1044331 發表于 2023-4-1 16:07 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
50黑幣
一:按鍵計數器。
將四個LED作為二進制輸出,按鍵中斷K2作為累加計數,每按下一下,LED二進制數加一,按鍵中斷K3作為累減計數,每按下一下,LED二進制數減一,并將結果通過串口終端輸出顯示。在此基礎上,可以進一步融合構思其它控制功能。
#include "exynos_4412.h"
static int num = 0;
/**********************************************************************
* @brief     IRQ Interrupt Service Routine program body
* @param[in] None
* @return        None
**********************************************************************/
void do_irq(void )
{
    int irq_num;
    irq_num = (CPU0.ICCIAR & 0x3FF);
    switch (irq_num) {
    case 58: //turn on LED2;turn off LED3
       GPX2.GPX2DAT = 0x1 << 7;
       GPX1.GPX1DAT &= ~0x1;
       printf("IRQinterrupt !! turn on LED2; turn off LED3\n");
       //Clear Pend
       EXT_INT41_PEND|= 0x1 << 2;
       ICDICPR.ICDICPR1 |= 0x1 <<26;
       break;
    case 57: //Turn on Led3;Turn off Led2
       GPX2.GPX2DAT &= ~(0x1<< 7);
       GPX1.GPX1DAT |= 0x1;
       printf("IRQinterrupt !! Turn on LED3; Turn off LED2\n");
       //Clear Pend
       EXT_INT41_PEND |= 0x1 << 1;
       ICDICPR.ICDICPR1 |= 0x1 <<26;
       break;
    }
    // End ofinterrupt
    CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x1FF)) |irq_num;
}
void mydelay_ms(int ms)
{
    int i, j;
    while(ms--)
    {
       for (i = 0; i < 5;i++)
           for (j = 0; j <514; j++);
    }
}
int main(void)
{
    //LED2 GPX2_7
    GPX2.GPX2CON |= 0x1 <<28;
    //LED3 GPX1_0
    GPX1.GPX1CON |= 0x1;
    //Led4 GPF3_4
    GPF3.GPF3CON |= 0x1 <<16;
    //Key_2  Interrupt GPX1_1
    GPX1.GPX1PUD = GPX1.GPX1PUD & ~(0x3<< 2); // Disables Pull-up/Pull-down
    GPX1.GPX1CON = (GPX1.GPX1CON & ~(0xF<< 4)) | (0xF << 4); //GPX1_1: WAKEUP_INT1[1](EXT_INT41[1])
    EXT_INT41_CON =(EXT_INT41_CON & ~(0x7 << 4)) | 0x2 << 4;
    EXT_INT41_MASK =(EXT_INT41_MASK & ~(0x1 << 1)); // Bit: 1 = Enables interrupt
    //Key_3  Interrupt GPX1_2
    GPX1.GPX1PUD = GPX1.GPX1PUD & ~(0x3<< 4); // Disables Pull-up/Pull-down
    GPX1.GPX1CON = (GPX1.GPX1CON & ~(0xF<< 8)) | (0xF << 8); //GPX1_2:WAKEUP_INT1[2] (EXT_INT41[2])
    EXT_INT41_CON =(EXT_INT41_CON & ~(0x7 << 8)) | 0x2 << 8;
    EXT_INT41_MASK =(EXT_INT41_MASK & ~(0x1 << 2)); // Bit: 1 = Enables interrupt
    /*
     * GIC interrupt controller:
     * */
    // Enables thecorresponding interrupt SPI25, SPI26 -- Key_2, Key_3
    ICDISER.ICDISER1 |= (0x1 <<25) | (0x1 << 26);
    CPU0.ICCICR |= 0x1; //Global enablefor signaling of interrupts
    CPU0.ICCPMR = 0xFF; //The prioritymask level.Priority filter. threshold
    ICDDCR = 1;   //Bit1:  GICmonitors the peripheral interrupt signals and
                  //     forwards pending interrupts to the CPUinterfaces2
    ICDIPTR.ICDIPTR14 = 0x01010101; //SPI25  SPI26  interrupts are sent to processor 0
    printf("\n********* GIC test ********\n");
    while (1){
       GPF3.GPF3DAT |= 0x1 << 4;
       mydelay_ms(500);
       GPF3.GPF3DAT &= ~(0x1<< 4);
       mydelay_ms(500);
    }
    return 0;

}


二:串口終端命令控制器
通過串口終端輸入來控制LED,
當串口輸入”A”,回車,第1個LED亮,其它滅;
當串口輸入”B”, 回車,第2個LED亮,其它滅;
當串口輸入”C”, 回車, 第3個LED亮,其它滅;
當串口輸入”C”, 回車,第4個LED亮,其它滅;
當串口輸入”LEFT”, 回車,4個LED實現左流水燈;
當串口輸入”RIGHT”, 回車,4個LED實現右流水燈;
在此基礎上,可以進一步融合構思其它控制功能。
#include "exynos_4412.h"
void mydelay_ms(int time)
{
    int i, j;
    while(time--)
    {
       for (i = 0; i < 5; i++)
           for (j = 0; j < 514; j++);
    }
}
void uart_init(void)
{
    /*UART2 initialize*/
    GPA1.GPA1CON = (GPA1.GPA1CON & ~0xFF ) | (0x22); //GPA1_0:RX;GPA1_1:TX
    UART2.ULCON2 = 0x3; //Normal mode, Noparity,One stop bit,8 data bits
    UART2.UCON2 = 0x5;  //Interrupt request or polling mode
    /*
     * Baud-rate 115200:src_clock:100Mhz
     * DIV_VAL = (100*10^6 /(115200*16) -1) = (54.3 - 1) = 53.3
     * UBRDIV2 = (Integer partof 53.3) = 53 = 0x35
     * UFRACVAL2 = 0.3*16 = 0x5
     * */
    UART2.UBRDIV2 = 0x35;
    UART2.UFRACVAL2 = 0x5;
}
void putc(const char data)
{
    while(!(UART2.UTRSTAT2 & 0X2));
    UART2.UTXH2 = data;
    if (data == '\n')
           putc('\r');
}
void puts(const  char  *pstr)
{
    while(*pstr != '\0')
       putc(*pstr++);
}
unsigned char getchar()
{
    unsigned char c;
    while(!(UART2.UTRSTAT2 & 0X1));
    c = UART2.URXH2;
    return c;
}
int main(void) {
    char c, str[] = "uarttest!! \n";
    //LED
    GPX2.GPX2CON = 0x1 << 28;
    uart_init();
    while(1)
       {
           //Turn on LED
           GPX2.GPX2DAT = GPX2.GPX2DAT | 0x1 << 7;
           puts(str);
           mydelay_ms(500);
           //Turn off LED
           GPX2.GPX2DAT = GPX2.GPX2DAT & ~(0x1 << 7);
           mydelay_ms(500);
       }
    return 0;

}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:1044331 發表于 2023-4-1 16:39 | 只看該作者
用的是Eclipse,串口不能用getchar
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产在线观看一区二区 | 国产精品成人国产乱 | 久久久久亚洲精品 | 免费高清成人 | 日韩精品无码一区二区三区 | 亚洲 成人 在线 | 国产成人91视频 | 久草精品视频 | 日韩免费毛片 | 国精日本亚洲欧州国产中文久久 | 欧美视频三区 | 国产高清无av久久 | 国产免费一级一级 | 欧美a∨ | 依人成人 | 亚洲视频一区在线 | 久久精品91久久久久久再现 | 免费观看av| 99精品欧美一区二区三区 | 国产精品99久久久久久www | 午夜在线 | 国产精品三级久久久久久电影 | 国产 91 视频| 欧美看片| 成人av电影天堂 | 中文字幕日本一区二区 | 视频三区 | 美女天天干天天操 | 日韩欧美精品在线 | 国产精品国产三级国产aⅴ原创 | 91 在线| 欧美中文字幕一区二区 | 国产成人精品一区二区三区视频 | 9久9久9久女女女九九九一九 | 一级a性色生活片久久毛片波多野 | 成人欧美一区二区三区黑人孕妇 | 日韩成人免费视频 | 国产精品亚洲精品久久 | 国产亚洲精品久久久优势 | 精品日韩一区二区三区av动图 | 九一视频在线播放 |