嵌入式--arm

Posted 飘然离去

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了嵌入式--arm相关的知识,希望对你有一定的参考价值。

两年前的东西了,整理一下,说不定以后就会用到了。

arm对于s3c2440的这个arm的驱动的整理。

其中包括:adc,beeper 蜂鸣器,key 按键,rtc ,timer定时器,UART等的驱动。

项目地址(github):https://github.com/yanjinyun/armS3c2440Drive

****************
这是adc的驱动

#include "s3c2440.h"

#if 0
void niuniu(void)
{
    uart_init();
    adc_init();

    adc_read();

    while(1)
    {
        itoa(adc_read());
        delay(10000);
    }
}
#endif

#if ADSTART==0
void niuniu(void)
{
    uart_init();
    adc_init();
    beeper_init();

    adc_read();

    while(1)
    {
        itoa(adc_read());
        if(adc_read() > 2500)
        {
            beeper_on();
        }
        else
        {
            beeper_off();
        }
        delay(10000);
    }
}
#endif

#if ADSTART==1
void niuniu(void)
{
    uart_init();
    adc_init();
    beeper_init();

    while(1)
    {
        adc_enable();
        itoa(adc_read());
        if(adc_read() > 2500)
        {
            beeper_on();
        }
        else
        {
            beeper_off();
        }
        delay(10000);
    }
}
#endif

********************
蜂鸣器的驱动:

#include "s3c2440.h"

#if 0
void niuniu(void)
{
    beeper_init();

    while(1)
    {
        beeper_on();
        delay(10000);
        beeper_off();
        delay(10000);
    }
}
#endif

#if 1
void niuniu(void)
{
    key_init();
    beeper_init();

    while(1)
    {
        if(key_on(11) == 1)
        {
            beeper_on();
        }
        else
        {
            beeper_off();
        }
    }
}
#endif

***************************
这个是按键的驱动key

#include "s3c2440.h"

#if 0
// 按键轮巡方式
void niuniu(void)
{
    led_init();
    key_init();

    while(1)
    {
        if(key_on(5) == 1)
        {
            led_on(1);
        }
        else
        {
            led_off(1);
        }
    }
}
#endif

#if 1
// 按键中断方式
void niuniu(void)
{
    beeper_init();
    key_init();
    extint_init();
    int_init();
    uart_init();

    while(1)
    {
        puts("key int mode\\r\\n");
        delay(1000);
    }
}
#endif

**************************
这个是Led灯的驱动:

#include "s3c2440.h"

void niuniu(void)
{
    led_init();

    while(1)
    {
        led_on(2);
        led_on(4);
        delay(10000);
        led_off(2);
        led_off(4);
        delay(10000);
    }
}

这个是rtc的驱动

#include "s3c2440.h"
#include <string.h>
#include <stdlib.h>

#if 0
void niuniu(void)
{
    int time[7];
    char buf[32], *p[9];
    int i;

    uart_init();
    
    while(1)
    {
        puts("\\r\\nrtc> ");
        gets(buf);
        buf[strlen(buf)-2] = \'\\0\';
        p[0] = strtok(buf, " ");
        for(i=1; p[i-1]!=NULL; i++)
        {
            p[i] = strtok(NULL, " ");
        }

        if(strcmp(p[0], "timeset") == 0)
        {
            time[0] = atoh(p[1]);
            time[1] = atoh(p[2]);
            time[2] = atoh(p[3]);
            time[3] = atoh(p[4]);
            time[4] = atoh(p[5]);
            time[5] = atoh(p[6]);
            time[6] = atoh(p[7]);
            rtc_init(time);
        }

        if(strcmp(p[0], "time") == 0)
        {
            rtc_display();
        }
    }
}
#endif

#if 1
void niuniu(void)
{
    uart_init();
    int_init();
    alarm_init();
    beeper_init();

    while(1)
    {
        rtc_display();
        sleep(1);
    }
}
#endif

这个是定时器的驱动:

#include "s3c2440.h"

void niuniu(void)
{
    int_init();
    timer_init();
    beeper_init();
    uart_init();

    timer_update();

    while(1)
    {
        puts("haha ......\\r\\n");
        sleep(1);
    }
}

这个是UART的定时器的驱动:

#include "s3c2440.h"
#include <string.h>

#if 0
void niuniu(void)
{
    char buf[32];

    uart_init();

    while(1)
    {
        puts("send: ");
        gets(buf);
        puts("\\nrecv: ");
        puts(buf);
    }
}
#endif

#if 1
void niuniu(void)
{
    char buf[16];
    char *p[6];
    int i;

    beeper_init();
    led_init();
    uart_init();

    while(1)
    {
        puts("\\r\\nuart> ");
        gets(buf);
        // 去掉\\r\\n
        buf[strlen(buf)-2] = \'\\0\';
        // strtok函数会使用全局变量
        p[0] = strtok(buf, " ");
        for(i=1; p[i-1]!=NULL; i++)
        {
            p[i] = strtok(NULL, " ");
        }

        if(strcmp(p[0], "ledon") == 0)
        {
            if(strcmp(p[1], "all") == 0)
            {
                for(i=1; i<5; i++)
                {
                    led_on(i);
                }
            }
            else
            {
                for(i=1; p[i]!=NULL; i++)
                {
                    led_on(*p[i]-48);
                }
            }
        }

        if(strcmp(p[0], "ledoff") == 0)
        {
            if(strcmp(p[1], "all") == 0)
            {
                for(i=1; i<5; i++)
                {
                    led_off(i);
                }
            }
            else
            {
                for(i=1; p[i]!=NULL; i++)
                {
                    led_off(*p[i]-48);
                }
            }
        }

        if(strcmp(p[0], "beeperon") == 0)
        {
            beeper_on();
        }

        if(strcmp(p[0], "beeperoff") == 0)
        {
            beeper_off();
        }
    }
}
#endif

 

以上是关于嵌入式--arm的主要内容,如果未能解决你的问题,请参考以下文章

《嵌入式 - 嵌入式大杂烩》ARM汇编入门

嵌入式ARM设计编程 处理器工作模式

ARM嵌入式开发中的GCC内联汇编__asm__

嵌入式Linux ARM汇编——C语言与ARM汇编混合编程

C/C++ 中嵌入 arm 汇编

嵌入式LAB 2:ARM指令