6410 设置时钟频率,uart0

接到上一篇OK6410 点亮LED,按键点灯,按键让蜂鸣器响文章继续设置cpu时钟和串口0.

添加clock.S文件如下,在start.S调用main函数前调用clock_init。设置 cpu频率为532MHZ,hclk为133MHZ,pclk为66.5MHZ

//设置时钟
	
.globl clock_init
clock_init:
    //设置lock_time
        ldr r0, =0x7e00f000
        ldr r1, =0xffff
        str r1, [r0]

        str r1, [r0, #4]
        str r1, [r0, #8]

        ldr r0, =0x7e00f900
        ldr r1, [r0]
        bic r1, r1, #0xc0
        str r1, [r0]

loop1:
        ldr r0, =0x7e00f900
        ldr r1, [r0]
        and r1, r1, #0xf00
        cmp r1, #0
        bne loop1


        ldr r0, =0x7e00f020
        ldr r1, =(0)|(0<<4)|(1<<8)|(1<<9)|(3<<12)
        str r1, [r0]

        ldr r0, =0x7e00f00c
        ldr r1, =(1<<31)|(266<<16)|(3<<8)|(1)
        str r1, [r0]

        ldr r0, =0x7e00f010
        ldr r1, =(1<<31)|(266<<16)|(3<<8)|(1)
        str r1, [r0]

        ldr r0, =0x7e00f01c
        ldr r1, =3
        str r1, [r0]

        mov pc, lr

可以看到led的闪烁加快了。

初始化uart0,添加uart目录添加uart0.c,uart0.h,如下

//uart0.h
#ifndef __UART0_H_
#define __UART0_H_

void uart0_init();

void putchar(char ch);
char getchar();

#endif //__UART0_H_


//uart0.c
#include "../s3c6410.h"

void uart0_init()
{
    //配置引脚为Tx,Dx
    //GPA0 [3:0] 0010 = UART RXD[0]
    //GPA1 [7:4] 0010 = UART TXD[0]
    GPACON_REG &= ~(0xff);
    GPACON_REG |= 0x22;

    ULCON0_REG = 0x3;
    UCON0_REG = (0x01<<0)|(0x01<<2)|(2<<10);

    UFCON0_REG = 1;
    UMCON0_REG = 0;

    //DIV_VAL = (PCLK / (bps x 16 ) ) −1 = 35.08
    UBRDIV0_REG = 35;

    UDIVSLOT0_REG = 0x0080;
}

void putchar(char ch)
{
    while ( (UFSTAT0_REG & (1<<14)));

    UTXH0_REG = ch;
}

char getchar()
{
    while ( (UFSTAT0_REG & 0x7f) == 0 );

    return URXH0_REG;
}

main.c中添加uart0_test()来通过串口得到数据控制led。

void uart0_test()
{
    char ch;
    while (1)
    {
        ch = getchar();
        putchar(ch);

        if (ch == '1')
        {
            led_on(1);
        }
        else if (ch == '2')
        {
            led_on(2);
        }
        else if (ch == '3')
        {
            led_on(3);
        }
        else if (ch == '4')
        {
            led_on(4);
        }
        else if (ch == '5')
        {
            led_all_on();
        }
        else
        {
            led_all_off();
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq1113231395/article/details/83540890