找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2565|回复: 0
打印 上一主题 下一主题
收起左侧

exynos_4412.h流水灯程序分享

[复制链接]
跳转到指定楼层
楼主
ID:608389 发表于 2019-9-8 12:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "exynos_4412.h"

void do_irq()
{
        // 获取中断号
        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;
        }

        // 把处理器中处理完的中断号返回给gic
        // 告诉gic该中断处理结束,可以送入下一个pending进入
        CPU0.ICCEOIR = (CPU0.ICCEOIR & ~(0x3ff)) | irq_num;
}

void peripheral_init()
{
        GPX1.CON = 0xff << 4;                // 配置GPIO为外部中断
        EXT_INT41_CON = 0x22 << 4;        // 下降沿触发中断
        EXT_INT41_MASK = 0x0;                // 使能相应外设
}

void gic_init()
{
        ICDISER.ICDISER1 = 0x3 << 25;                // 使能按键中断号
        ICDIPTR.ICDIPTR14 = 0x0101 << 8;         // 选择cpu接口
        ICDDCR = 0x1;                                                // 使能中断到分配器
        CPU0.ICCICR = 0x1;                                 // 把中断从cpu接口送入处理器
        // 屏蔽中断优先级,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;        // 预分频值为99 -> 100
        PWM.TCFG1 = 0x3;        // 二级分频为1/8
        PWM.TCON = 0x2;                // 手动装载
        PWM.TCON = 0x8;                // 自动重装
}

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空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表