zoukankan      html  css  js  c++  java
  • arm基础1

    ATPSCS: 传参怎么传
    函数的调用,函数的跳转 利用栈传递参数。

    overview
    S5PV210 is 32 ARM Coretex-A8 64bit外部存储。LPDDR低功耗 NAND Flash base: NOR-FLASH(base, loader),
    cpu: 结构布局: cpu : 计算器,通用的可编程接口GPIO:Memory Interface

    BUS总线; UART 64个字节的缓冲。
    通用的可编程的端口。
    237个GPIO。
    物理地址: DRAM: 物理内存,通过地址查找。
    200 0000 地址。
    可以接内存。特俗功能寄存器。
    0x0000_0000
    RAM_ROM 在cpu内部。
    硬件工程师。可用。

    时钟,电源 ,芯片的常识。计算机的存储。
    输入输出。数据库,存在内盘。 输入输出。

    介质: 金字塔。 塔尖的读取速度越高。寄存器,---》 cache :SRAM,随机存储器---》 内存:DRAM SDRAM DDRAM 介质:硅。IO,存储设备:

    核心板,底板。


    标号定格写:
    控制寄存器: 使能
    数据寄存器: 给数据
    看电路图,看数据手册。
    开启超级终端。
    初始化开发板上的主要硬件,把操作系统从硬盘拷贝到内存,然后让cpu跳到内存中执行kernal
    bootloader:

    看门狗: 防止程序死机。喂狗程序,
    boot阶段:
    1关闭影响cpu正常执行的外设。
    --关闭看门狗
    --关闭中断
    2 初始化时钟
    目的: 把开发的倍频到1GHZ,外设分频
    3 内存不能容,初始化内存控制器。DDRAM内存。
    怎么验证内存可以工作了:忘内存中写,再读。读出的数据,赋值到灯gpio.
    4 初始化硬盘: NAND FLASH
    -nand flash 读驱动(从nang)

    loader阶段:
    1 从硬盘指定的地址加载kernal到内存指定位置。
    2 跳转到内存kernal所在的地址,执行
    常用调试手段:

    1 led点灯
    2 蜂鸣器,
    3 串口调试输入输出。T R int getchar(void) void putchar(int)

    uart_getchar(),uart_putchar(char)

    字符串的函数: strstr()
    字符串,数据结构(逻辑水平),项目经验

    uart_gets()
    uart_puts()
    uart_printf()
    uart_scanf()

    超级终端:收发数据,重要的手段。
    快速实现stdio.h中的方法:
    开发板加电后不能调用任何函数。
    串口的驱动位置:放在初始化时钟。115200依赖时钟。

    最小bootloader.

    附加功能: 实现bootloader中的shell
    mw 0xe02000a0 0x1
    mw 0xe0200040 0x1

    命令解析器:

    执行bootloader 进入androi

    找看门狗:中断:
    1 有没有
    2 状态
    3 关闭
    第一章:
    timer 看门狗再芯片中:
    Reset enable/disable 设置定时器是否发送信号。
    Watchdog timer 开关。

    pclk 输入时钟源: 设置分频器。 WTDAT 数据
    WTCNT(RESET ,INTERU信号)

    0xE2700000 WTCON 把第一位和第0位置零。
    关闭中断: CPSR I和F位都关闭,设置为1不影响任何中断
    防止cpu跑飞

    初始化时钟: COLOCK CONTROLLER


    12MHZ 外部时钟s3c2440 pll 倍频304MHZ 分频器分频: HCLK 100MHZ mem控制器PCLK 50MHZ gpio PLCK 304ARM920t处理核心


    设置寄存器目标:产生所需的HCLK,PCLK,FCLK

    MPLL倍频器:
    HCLK: USB Nand flash 降低频率可以省点
    PCLK: WT UART GPIO,

    UPLL: USB设备。UPLL

    锁定时间:不让cpu执行程序

    ckermit : 超级终端。配置文件 /etc/kermit/kermrc 指定串口和波特率 权限问题


    命令模式: c 从命令切换到 通信模式,ctrl+c+
    send file 发送文件
    通信模式:

    bootloader :
    make disclean

    make

    uboot: shell 加载操作系统
    sudo fdisk l 查看U盘

    sdb1 烧录: sudo dd iflag=dsync oflag=dsync if=xxx.bin of=/dev/sdb seek=1 跳过第一个扇区
    异步通信:RSTXD0, RSRXD0 MAX3232CSE 电压转换,210芯片:
    com1
    数据宽度: 5,6,7,8.
    奇偶校验:
    停止位:

    配置功能模式:串口控制器。
    uart-gethcar()
    uart_putchar()
    在芯片手册: cache

    时钟来之PCLK,低速时钟。
    接受移位寄存器,接受缓存寄存器。
    fifo Register:
    buad-rate Generator:
    行功能寄存器:
    波特率要匹配: 不匹配造成乱码
    串口的工作模式: control 轮询模式
    串口的队列: 默认关闭
    串口状态寄存器: 接受数据,当接受缓冲区有有效数据,自动置位1 transmit 发送

    波特率寄存器。

    实现串口收和发:
    串口变编写的完整示例:

    #define ULCON0 *((volatile unsigned int *)0XE2900000)
    #define UCON0 *((volatile unsigned int *)0XE2900004)
    #define UTRSTAT0 *((volatile unsigned int *)0XE2900010)
    #define UTXH0 *((volatile unsigned int *)0XE2900020)
    #define URXH0 *((volatile unsigned int *)0XE2900024)
    #define UBRDIV0 *((volatile unsigned int *)0XE2900028)
    #define UDIVSLOT0 *((volatile unsigned int *)0XE290002C)
    #define GPACON0 *((volatile unsigned int *)0XE0200000)

    void uart_init(void)
    {
    //设置 波特率 模式 管脚
    GPACON0 = 0X22;
    轮询模式
    UCON0 = 0X5

    }
    char uart_getchar(void)
    {
    //如果有数 状态寄存器为1
    //判断状态是否为1
    char ch;
    while(!(UTRSTAT0 & 0X1));
    ch = URXH0;
    return ch;
    }
    char uart_putchar(char ch)
    {
    //如果状态寄存器状态为1

    }
    void uart_test(void)
    {
    char ch;
    uart_init();
    uart_putchar();

    while(1)
    {

    ch = uart_getchar();
    uart_putchar(ch);
    }

    }
    启动代码:


    内存的地址管脚 数据管脚连接数据总线

    控制总线: 控制片选信号

    驱动内存: 定时的充电,
    初始化内存的代码: 原理

    *(unsigned int*)0x8000 = 0x1234567

    *(unsigned int*)0x2000 8000
    1 产生片选内存被片选选中
    2 发送地址,计算偏移地址。
    3发送8000这个偏移地址。
    4 每片内存都选中字节的8000这个单元
    5 每篇内存都去读取总线上的数据,存储到0x8000

    nandflash工作原理:

    一个页面有多大,串行读速度快。十万次擦写。
    pin description ALE 地址锁存。
    高电平有效。地址,命令,数据。 盲写类:反映芯片状态。
    5个周期传输地址。
    1page = (2k+64)byte
    1block = (2k+64)b*64page
    1device=(2k+64)

    从nandflash读写擦除。
    SLC 每个存储单元只能存一个数据
    贵 速度块 写稳定 保存时间长
    MLC 每个存储单元可以存2个数据
    便宜 速度慢 写不稳定 保存时间短

  • 相关阅读:
    [书目20170308]你能为公司带来什么
    [书目20170308]卓有成效的管理者
    [转]NLog Layout Renderers ${}
    转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
    [转]Using NLog for ASP.NET Core to write custom information to the database
    [转]快速入门系列--WebAPI--01基础
    [转]NLog学习笔记二:深入学习
    [转]Create Custom Exception Filter in ASP.NET Core
    弟子规
    论语
  • 原文地址:https://www.cnblogs.com/countryboy666/p/11831728.html
Copyright © 2011-2022 走看看