推荐阅读最新更新时间:2024-11-08 11:08
linux的串口驱动分析
1、串口驱动中的数据结构 • UART驱动程序结构:struct uart_driver 驱动 • UART端口结构: struct uart_port 串口 • UART相关操作函数结构: struct uart_ops 串口操作函数集 • UART状态结构: struct uart_state 串口状态 • UART信息结构: struct uart_info 串口信息 2、串口驱动程序-初始化 3、串口驱动分析-打开设备 static int s3c24xx_serial_startup(struct uart_port *port) { struct s3c24xx_uart_port *ourport =
[单片机]
STM8的中断系统以及外部中断详解
STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有可编程的优先级,共有两位优先级,两个BIT的优先级可以催化出4个优先级,具体如下 中断控制器内部有一些寄存器专门用来存放相应的中断的中断优先级,同同时,在系统内部也有一个系统寄存器CC他的第三位和第五位分别表示当前正在处理的中断的优先级 可以这样认为,中断发生的时候,系统寄存器在执行中断向量跳转的时候自动载入了相应的中断优先级到系统寄存器CC中. 中断的处理遵循先判断软件优先级后判断硬件优先级的模式,当几个中断同时发生
[单片机]
STM8与汇编语言(6)--8位定时器应用之一
STM8单片机中的外设资源是比较丰富的,定时器有8位的也有16位的,下面的实验程序,就是利用8位定时器4来进行延时,然后驱动LED闪烁。 同样还是利用ST的开发工具,生成一个汇编程序的框架,然后修改其中的main.asm,修改后的代码如下。 编译通过后,下载到开发板,运行程序,可以看到LED在闪烁,或者用示波器可以在LED引脚上看到方波。 在这里要特别提醒的是,从ST给的手册上看,这个定时器中的计数器是一个加1计数器,但本人在实验过程中感觉不太对,经过反复的实验,我认为应该是一个减1计数器(也许是我拿的手册不对,或许是理解上有误)。例如,当给定时器中的自动装载寄存器装入255时,产生的方波频率最小,就象下面代码中计算的
[单片机]
STM32启动后系统初始化SystemInit()
启动文件中复位异常相应函数如下: ; Reset handler Reset_Handler PROC EXPORT Reset_Handler IMPORT __main IMPORT SystemInit LDR R0, =SystemInit BLX R0 LDR R0, =__main BX R0 ENDP SystemInit()这个函数出现在main()函数的第一行,可以看出它的重要性。以前关于SystemInit()
[单片机]
RT-Thread 自动初始化机制
自动初始化机制是指初始化函数不需要被显式调用,只需要在函数定义处通过宏定义的方式进行申明,就会在系统启动过程中被执行。 在RTT的代码中,有rt_components_init()和rt_components_board_init();两个函数,用于实现自动初始化机制。 RTT官方文档的系统启动流程图中,6种注册分别于上述两个函数中实现自动初始化。 两个初始化函数也很简单,就是调用从__rt_init_rti_board_start到__rt_init_rti_board_end的函数执行一遍;__rt_init_rti_board_end到__rt_init_rti_end的函数执行一遍。 /** * RT-Thr
[单片机]
STM32通用定时器TIM25基本用法
STM32的定时器是个强大的模块,定时器使用的频率也是很高的,定时器可以做一些基本的定时,还可以做PWM输出或者输入捕获功能。从系统框架图下看,名为TIMx的有八个,其中TIM1和TIM8挂在APB2总线上,而TIM2-TIM7则挂在APB1总线上。其中TIM1&TIM8称为高级控制定时器(advancedcontroltimer).他们所在的APB2总线也比APB1总线要好。APB2可以工作在72MHz下,而APB1最大是36MHz。 由上图可知,当APB1的预分频系数为1 时,这个倍频器不起作用,定时器的时钟频率等于APB1的频率;当APB1的预分频系数为其它数值(即预分频系数为2、4、8 或16)时,这个倍频
[单片机]
STM8避坑—串口中断
STM8库函数开发方式中,串口中断的类型有很多,头文件中的定义入下: typedef enum { UART1_IT_TXE = (uint16_t)0x0277, /*! Transmit interrupt */ UART1_IT_TC = (uint16_t)0x0266, /*! Transmission Complete interrupt */ UART1_IT_RXNE = (uint16_t)0x0255, /*! Receive interrupt */ UART1_IT_IDLE = (uint16_t)0x0244, /*! IDL
[单片机]
浅谈分析Arm linux 内核移植及系统初始化的过程一
学习嵌入式ARM linux ,主要想必三个方向发展: 1 、嵌入式linux 应用软件开发 2 、linux 内核的剪裁和移植 3 、嵌入式linux 底层驱动的开发 主 要介绍内核移植过程中涉及文件的分布及其用途,以及简单介绍系统的初始化过程。整个arm linux内核的启动可分为三个阶段:第一阶段主要是进行 cpu和体系结构的检查、cpu本身的初始化以及页表的建立等;第二阶段主要是对系统中的一些基础设施进行初始化;最后则是更高层次的初始化,如根设备和 外部设备的初始化。了解系统的初始化过程,有益于更好地移植内核。 1. 内核移植 2. 涉及文件分布介绍 2.1. 内核移植 2.2. 涉及的头文件 /linux-2.6.1
[单片机]