历史上的今天
返回首页

历史上的今天

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

正在发生

2018年10月11日 | OK6410裸机学习之时钟设置-汇编

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]

    

    // 设置时钟 

    bl clock_init

    // 设置栈 

    ldr sp, =8*1024

    bl main

halt:

    b halt    

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

clock.S源码:

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

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

.globl clock_init

clock_init:

    

    // 1.设置LOCK_TIME ,等待时钟稳定的时间

    ldr r0, =0x7E00F000  // APLL_LOCK 

    ldr r1, =0x0000FFFF

    str r1, [r0]

    

    str r1, [r0, #4]           // MPLL_LOCK 

    str r1, [r0, #8]           // EPLL_LOCK     

    

#define OTHERS        0x7e00f900

    @ set async mode     // 当CPU时钟 != HCLK(内存等)时,要设为异步模式 

    ldr r0, =OTHERS

    ldr r1, [r0]

    bic r1, #0xc0            

    str r1, [r0]

loop1:                           // 等待,直到CPU进入异步模式 

    ldr r0, =OTHERS

    ldr r1, [r0]

    and r1, #0xf00                    

    cmp r1, #0

    bne loop1        

    

    // SYNC667 

    // MISC_CON[19] = 0 

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

#define HCLKX2_RATIO 1   // HCLKX2 = HCLKX2IN / (HCLKX2_RATIO + 1) 

#define HCLK_RATIO   1     // HCLK = HCLKX2 / (HCLK_RATIO + 1)       

#define PCLK_RATIO   3     // PCLK   = HCLKX2 / (PCLK_RATIO + 1)     

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

    ldr r0, =0x7E00F020        // CLK_DIV0 

    ldr r1, =(ARM_RATIO) | (MPLL_RATIO << 4) | (HCLK_RATIO << 8) | (HCLKX2_RATIO << 9) | (PCLK_RATIO << 12)

    str r1, [r0]

    

    // 2.配置时钟 

    // 2.1 配置APLL 

    // 2.1.1 设置APLL

    // 2.1.2 MUXAPLL

    // 2.1.3 SYNC667

    // 2.1.4 DIVAPLL

     

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

    ldr r0, =0x7E00F00C

    ldr r1, =APLL_CON_VAL

    str r1, [r0]        // APLL_CON, FOUTAPL = MDIV * Fin / (PDIV*2^SDIV) = 266*12/(3*2^1) = 532MHz  

    

    // 2.2 配置MPLL 

    // 2.2.1 设置MPLL

    // 2.2.2 MUXMPLL

    // 2.2.3 SYNCMUX

    // 2.2.4 SYNC667

    // 2.2.5 HCLKX2_RATIO

    // 2.2.6 PCLK_RATIO

     

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

    ldr r0, =0x7E00F010

    ldr r1, =MPLL_CON_VAL

    str r1, [r0]        // MPLL_CON, FOUTMPL = MDIV * Fin / (PDIV*2^SDIV) = 266*12/(3*2^1) = 532MHz  

    

    // 3.选择PLL的输出作为时钟源 

    ldr r0, =0x7E00F01C

    ldr r1, =0x03

    str r1, [r0]

    

    mov pc, lr

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

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裸机学习之时钟设置-汇编


推荐阅读

史海拾趣

Heidenhain Corp公司的发展小趣事

在全球化背景下,海德汉公司不断拓展其国际市场版图。通过参加国际展会、建立海外分支机构等方式,海德汉成功将其高精度数控系统和自动化解决方案推向全球电子市场。特别是在亚洲、欧洲和北美等电子产业发达的地区,海德汉的产品和技术得到了广泛应用和认可。这一市场拓展战略不仅提升了海德汉的品牌知名度和市场份额,也为其在电子行业的长期发展奠定了坚实基础。

需要注意的是,以上故事虽基于事实背景构建,但具体细节和案例可能有所虚构或简化,以符合问题要求和字数限制。

FTCAP Fischer & Tausche Capacitor Group公司的发展小趣事

在半导体制造这一高端电子领域,海德汉公司也展现出了其强大的技术实力。某国际领先的半导体制造商在研发新一代芯片制造设备时,选择了海德汉的高精度编码器作为关键部件。海德汉编码器以其卓越的稳定性和精度,确保了芯片制造过程中的高精度定位和运动控制,为半导体制造商提供了可靠的技术保障。这一合作不仅提升了半导体制造设备的整体性能,也进一步巩固了海德汉在高端电子制造领域的市场地位。

HI Microwave Technology Limited公司的发展小趣事

HI Microwave深知质量是企业生存和发展的根本。因此,公司从原材料采购到成品出厂的每一个环节都严格把关,确保产品质量符合国际标准和客户要求。同时,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这种以客户为中心的服务理念赢得了客户的信任和忠诚,也为公司的持续发展奠定了坚实的基础。

启珑(CHIPLON)公司的发展小趣事

随着技术的不断积累和市场需求的日益增长,HI Microwave不断加大研发投入,成功开发出了一系列高性能的微波组件产品,包括隔离器、循环器、开关、滤波器、功率分配器/合成器、定向耦合器、天线、混频器、压控振荡器(VCOs)和射频放大器等。这些产品广泛应用于无线电信和光纤通信行业,满足了客户多样化的需求。同时,公司还积极与国内外知名企业和科研机构合作,共同推动微波通信技术的发展。

GuangDong Province MengCo Semiconductor Co., Ltd公司的发展小趣事
选用质量可靠、性能稳定的元器件是确保电路可靠性的基础。
CHERRY公司的发展小趣事

1953年,一位名叫Walter Lorain CHERRY的德国年轻人在美国创立了Cherry公司,地点选在了一家餐厅的地下室。当时,Cherry的主要业务是生产微动开关,这种开关被广泛应用于各种电子设备中。Cherry的微动开关因其高品质和可靠性而赢得了市场的广泛认可,逐渐成为了行业内的佼佼者。

问答坊 | AI 解惑

功能图的基本结构

→『功能表图的基本结构』 (1)单序列 单序列由一系列相继激活的步组成,每一步的后面仅接有一个转换,每一个转换的后面只有一个步,如图5-22a所示。 图5-22 单序列与选择序列 a)单序列 b)选择序列开始 c)选择序列结束 (2)选择序列 选 ...…

查看全部问答>

谁帮忙看一下这个关于SST39VF040擦除的小问题(附短小的代码)

下面是SST39VF040 Flash的扇区擦除代码,但是应该是有问题的,我擦除不成功,另外的读写和整片擦除都没有问题,就不贴出来了,哪位仁兄给我瞧瞧问题出在哪里? void Chip_Page_Erase(ulong s_addr) {           ulo ...…

查看全部问答>

请问计算机如何把数据传输给显卡的?程序员如何提取这部分数据?

如题: 请问计算机如何把数据传输给显卡的?程序员应该如何提取这部分数据?…

查看全部问答>

16进制文件(PCM文件)内容 如何自动加上0x头

1.原文件打开内容如下 D5 55 55 55 55 D5 ..... //后面有N多行 2.用什么软件或方法可以实现如下 1)自动在16进制文件前加0x; 2)在16进制数字之间加逗号; 0xD5, 0x55, 0x55, 0x55, 0x55, 0xD5, 请各位指点.谢谢!…

查看全部问答>

编址方式(独立编址和统一编址)与结构(哈佛结构和冯.诺依曼结构)有关系吗?

    有些资料上说程序存储器和数据存储器统一编址就是冯.诺依曼结构或普林斯顿体系结构(Freescale的MC68HC05/08),而两者独立编址就是哈弗体系结构(MCS-51),而到了Microchip,他们说他们的PIC16系列除了采用“哈弗体系结构”(MCS-51 ...…

查看全部问答>

请问怎么写能实现最快copy速度?

想在EVC4.2下用WIN32方式写一段程序实现Storge1盘数据copy到Storge2\\\\file1目录中. 请问怎么写能实现最快copy速度?…

查看全部问答>

请问lm3s8962的MAC地址如何写入,写入后能否修改?

请问lm3s8962的MAC地址如何写入,写入后能否修改?…

查看全部问答>

如此出错是何道理?

看28X DSP的例子  Ramfunc段 从FLASHD段copy到RAMH0段 ramfunc  :   LOAD = FLASHD,                    RUM  = RAMH0,     ...…

查看全部问答>

锡膏搅拌机(日本MALCOM)

锡膏搅拌机(日本MALCOM)SPS-1(单罐)      SPS-2(双罐)有利于提高效率【特点】 ●容器内的夹具适用与各式包装锡膏罐,可直接在密封状态下进行自动搅拌,不氧化,不吸湿●搅拌均匀●搅拌时不需事先将锡膏进行解冻,经 ...…

查看全部问答>

速问3V逻辑接口可以给3.3V逻辑信号吗?

ADC 数字接口兼容1.8V/2.5V/3V/5V,可是单片机是3.3V数字信号输出。 以前没注意,ADC的VIO和数字信号线都直接给3.3V,也没怎么着,这样会出什么问题吗?谢谢!…

查看全部问答>