历史上的今天
返回首页

历史上的今天

今天是:2024年10月11日(星期五)

正在发生

2018年10月11日 | OK6410裸机学习之时钟设置-C语言

2018-10-11 来源:eefocus

start.S源码:

.globl _start

_start:

// 硬件相关的设置 

    // Peri port setup 

    ldr r0, =0x70000000

    orr r0, r0, #0x13

    mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)

    

// 关看门狗 

    // 往WTCON(0x7E004000)写0 

    ldr r0, =0x7E004000

    mov r1, #0

    str r1, [r0]

    

    // 设置栈 

    ldr sp, =8*1024

    // 设置时钟 

    bl clock_init

    bl main

halt:

    b halt    

===================================================================

clock.c源码:

#define APLL_LOCK (*((volatile unsigned long *)0x7E00F000))

#define MPLL_LOCK (*((volatile unsigned long *)0x7E00F004))

#define EPLL_LOCK (*((volatile unsigned long *)0x7E00F008))

#define OTHERS    (*((volatile unsigned long *)0x7e00f900))

#define CLK_DIV0  (*((volatile unsigned long *)0x7E00F020))

#define ARM_RATIO    0     // ARMCLK = DOUTAPLL / (ARM_RATIO + 1)    

#define HCLKX2_RATIO 4   // HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) = 100MHz 

#define HCLK_RATIO   0     // HCLK = HCLKX2 / (HCLK_RATIO + 1)   = 100MHz       

#define PCLK_RATIO   1     // PCLK   = HCLKX2 / (PCLK_RATIO + 1) = 50MHz    

#define MPLL_RATIO   0    // DOUTMPLL = MOUTMPLL / (MPLL_RATIO + 1)     

#define APLL_CON  (*((volatile unsigned long *)0x7E00F00C))

#define APLL_CON_VAL  ((1<<31) | (250 << 16) | (3 << 8) | (1))

#define MPLL_CON  (*((volatile unsigned long *)0x7E00F010))

#define MPLL_CON_VAL  ((1<<31) | (250 << 16) | (3 << 8) | (1))

#define CLK_SRC   (*((volatile unsigned long *)0x7E00F01C))

//MDIV=250 对应: ARMCLK = 500MHz, HCLK = 100MHz, PCLK = 50MHZ 

//MDIV=266 对应: ARMCLK = 532MHz, HCLK = 133MHz, PCLK = 66.5MHZ 

void clock_init(void)

{

    APLL_LOCK = 0xffff;

    MPLL_LOCK = 0xffff;

    EPLL_LOCK = 0xffff;

    // set async mode 当CPU时钟 != HCLK时,要设为异步模式 

    OTHERS &= ~0xc0;

    while ((OTHERS & 0xf00) != 0);

    CLK_DIV0 = (ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12);

    

    APLL_CON = APLL_CON_VAL;    // 500MHz 

    MPLL_CON = MPLL_CON_VAL;  // 500MHz 

    CLK_SRC = 0x03;

}

====================================================================

led.c源码:

void delay()

{

    volatile int i = 0x10000;

    while (i--);

}

int main()

{

    int i = 0;

    

    volatile unsigned long *gpmcon = (volatile unsigned long *)0x7F008820;

    volatile unsigned long *gpmdat = (volatile unsigned long *)0x7F008824;

    

    // gpm0,1,2,3设为输出引脚 

    *gpmcon = 0x1111;

    

    while (1)

    {

        *gpmdat = i;

        i++;

        if (i == 16)

            i = 0;

        delay();

    }

    

    return 0;

}

====================================================================

Makefile:

led.bin: start.o clock.o led.o

    arm-linux-ld -Ttext 0 -o led.elf start.o clock.o led.o

    arm-linux-objcopy -O binary led.elf led.bin

    arm-linux-objdump -D led.elf > led.dis

%.o : %.S

    arm-linux-gcc -o $@ $< -c

%.o : %.c

    arm-linux-gcc -o $@ $< -c

    

clean:

    rm *.o led.elf led.bin led.dis

OK6410裸机学习之时钟设置-C语言


推荐阅读

史海拾趣

EBK Kruger GmbH & Co KG公司的发展小趣事

面对数字化浪潮的挑战,EBK Kruger积极拥抱数字化转型。公司引入了先进的ERP系统和智能制造技术,提高了生产效率和产品质量。同时,EBK Kruger还加强了对大数据和人工智能技术的研发和应用,为客户提供了更加智能化和个性化的产品和服务。通过数字化转型的推动,EBK Kruger在激烈的市场竞争中保持了领先地位。

E-T-A [E-T-A Circuit Breakers]公司的发展小趣事

E-T-A公司的前身可以追溯到1948年,当时由Jakob Ellenberger和Harald A. Poensgen在德国共同创立了ELPO GmbH公司。这家初创企业专注于电气设备的研发和生产。随着技术的不断发展和市场的日益扩大,公司逐渐意识到设备用断路器在电路保护领域的重要性。因此,在1953年,公司正式推出了设备用的ETA断路器,并开始逐渐将重心转移到断路器领域,这也为日后E-T-A公司的成立奠定了基础。

德崧电子(D-SWITCH)公司的发展小趣事

在电子开关行业,防水性能一直是重要的技术指标。德崧电子(D-SWITCH)公司在成立初期就意识到了这一点,并投入大量资源进行研发。经过数年的努力,公司成功研发出了具有TUV IP67/IP68防水等级认证的防水型开关。这一突破性的技术不仅解决了市场上防水开关性能不稳定的问题,还大大提高了产品的可靠性和使用寿命。凭借这一技术优势,德崧电子在市场上迅速崭露头角,赢得了客户的广泛认可。

Anderson Power Products公司的发展小趣事

技术创新是德崧电子持续发展的核心动力。公司不断加大研发投入,引进先进的生产设备和技术人才,致力于开发具有竞争力的新产品。通过不断的技术创新,德崧电子在电子开关行业中取得了多项重要成果。例如,公司成功研发出了具有自动感应功能的智能开关,实现了对灯光、温度等环境因素的自动调节。这一技术的推出不仅提高了产品的智能化水平,也为公司赢得了更多的市场份额。

FCI [First Components International]公司的发展小趣事

技术创新是德崧电子持续发展的核心动力。公司不断加大研发投入,引进先进的生产设备和技术人才,致力于开发具有竞争力的新产品。通过不断的技术创新,德崧电子在电子开关行业中取得了多项重要成果。例如,公司成功研发出了具有自动感应功能的智能开关,实现了对灯光、温度等环境因素的自动调节。这一技术的推出不仅提高了产品的智能化水平,也为公司赢得了更多的市场份额。

Cybernetic Micro Systems公司的发展小趣事

随着智能手机市场的迅猛发展,CMS看到了新的机遇。公司投入大量研发资源,成功开发出一款专为智能手机设计的超低功耗芯片。这款芯片不仅性能卓越,而且能够有效延长手机的续航时间。CMS通过与多家知名手机厂商合作,将这款芯片广泛应用于各类智能手机中,从而迅速打开了市场。

问答坊 | AI 解惑

如何打造行业领军企业

效益是企业赖以生存的前提,创新是企业发展的动力,创新活动,是市场拉动和技术推动两者的汇聚点。在过去的计划经济时代,重庆川仪和当时很多国营企业一样,技术开发严重脱离市场、脱离生产,看似研发成果不断,但真正形成产品并赚回真金白银的却不 ...…

查看全部问答>

关于6410访问SPI总线的问题,请高手指教

小弟把三星的SPI总线驱动编译进了内核,(开发板提供了源码但是没有加入内核)。然后用WriteFile函数发送测试数据,可以看到SPI口输出正常,但是用ReadFile读取SPI口时,一直读回0. SPI的读取时序如下图,我先用 WriteFile(hSPI, &cBuffer_out, 1, ...…

查看全部问答>

哈哈 今天的第一帖又是我发的!~

哈哈 今天的第一帖又是我发的!~…

查看全部问答>

LM3S8962学习(二) -- 按键与中断

读按键的值,可以通过函数GPIOPinRead来完成   如何实现中断呢?主要有以下几个步骤需要做   1. 先定义一个LED和一个KEY #define LED GPIO_PIN_0#define KEY GPIO_PIN_0   2. 在startup_rvmdk.S 文件中增加PORT_E的中断服务 ...…

查看全部问答>

【求助】请帮忙选个MOS管做开关管

要求条件是:通过电压为5V电流最大值是2A,有着方面得经验得DX帮忙啊!!!! 先谢谢了啊!!!! 把你们经常用的型号告诉我好吗???…

查看全部问答>

我的车库门摇控器上的LSD2262 芯片坏了...

请问贵网站的LSD2262 芯片能替换上去吗..!!!直接取下焊上就能用吗!!!先谢谢!!!我是菜鸟…

查看全部问答>

求救8962的硬件spi问题

我用8962的spi去驱动12864,为什么无论怎么配置都无法驱动成功啊,屏幕总是出雪花,一般这种情况我认为是传输太快造成的,有高手 驱动成功过吗??求教!…

查看全部问答>

如何在ccs软件仿真上实现语音的的处理,

我做的是IMBE语音编码算法的移植,IMBE主程序已经编译通过 且运行正常 现在要做的就是来一段语音 模拟编码和解码一下 看看合成出的语音质量 还有编码速率。请问 我们老师说要下载一个wavread.c文件 来读入语音  可是 要怎么实现读入语音程序和 ...…

查看全部问答>

人人都爱易电源——转发有礼!

人人都爱易电源——转发有礼! 活动主题:人人都爱易电源——转发有礼!活动时间:10月11日—28日 活动链接:https://bbs.eeworld.com.cn/thread-352431-1-1.html…

查看全部问答>

学习很累!

哎,研究生生活马上过去一半了,回望着一年确实学到了不少东西,感觉自己能力提高了些许,但是还是很多细节的方面需要加强,继续努力,加油!…

查看全部问答>