找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2565|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

exynos_4412.h流水燈程序分享

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:608389 發(fā)表于 2019-9-8 12:10 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "exynos_4412.h"

void do_irq()
{
        // 獲取中斷號(hào)
        unsigned int irq_num = CPU0.ICCIAR & 0x3ff;
        switch(irq_num)
        {
        case 57:
                printf("This interrupt id is %d\n", irq_num);
                PWM.TCON = PWM.TCON ^ 0x1;
                EXT_INT41_PEND = 0x1 << 1;                // 清pend(置1清0)
                ICDICPR.ICDICPR1 = 0x1 << 25;        // 清gic
                break;
        case 58:
                        printf("This interrupt id is %d\n", irq_num);
                        GPX2.DAT = GPX2.DAT ^ (0x1 << 7);
                        EXT_INT41_PEND = 0x1 << 2;                // 清pend(置1清0)
                        ICDICPR.ICDICPR1 = 0x1 << 26;        // 清gic
                        break;
        default:
                printf("error!\n");
                break;
        }

        // 把處理器中處理完的中斷號(hào)返回給gic
        // 告訴gic該中斷處理結(jié)束,可以送入下一個(gè)pending進(jìn)入
        CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x3ff)) | irq_num;
}

void peripheral_init()
{
        GPX1.CON = 0xff << 4;                // 配置GPIO為外部中斷
        EXT_INT41_CON = 0x22 << 4;        // 下降沿觸發(fā)中斷
        EXT_INT41_MASK = 0x0;                // 使能相應(yīng)外設(shè)
}

void gic_init()
{
        ICDISER.ICDISER1 = 0x3 << 25;                // 使能按鍵中斷號(hào)
        ICDIPTR.ICDIPTR14 = 0x0101 << 8;         // 選擇cpu接口
        ICDDCR = 0x1;                                                // 使能中斷到分配器
        CPU0.ICCICR = 0x1;                                 // 把中斷從cpu接口送入處理器
        // 屏蔽中斷優(yōu)先級(jí),255表示所有中斷都允許通過
        CPU0.ICCPMR = 0xff;
}

void mydelay_ms(int ms)
{
        int i, j;
        while(ms--)
        {
                for (i = 0; i < 5; i++)
                        for (j = 0; j < 500; j++);
        }
}

void pwm_init()
{
        GPD0.CON = 0x2;        // GPIO配置為TOUT_0
        PWM.TCNTB0 = 1000;
        PWM.TCMPB0 = 500;
        PWM.TCFG0 = 0x63;        // 預(yù)分頻值為99 -> 100
        PWM.TCFG1 = 0x3;        // 二級(jí)分頻為1/8
        PWM.TCON = 0x2;                // 手動(dòng)裝載
        PWM.TCON = 0x8;                // 自動(dòng)重裝
}

void led_init()
{
        GPX2.CON = GPX2.CON & (0xf << 28) | (0x1 << 28);
}

int main()
{
        peripheral_init();
        gic_init();
        pwm_init();
        led_init();
        int i = 0;
        while(1)
        {
                mydelay_ms(800);
        }

        return 0;
}

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

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表