ARM逻辑驱动学习笔记

arm程序:
RO:只读段(代码段+只读数据段.text
.rodata)
RW:可读可写段(数据段.data)
ZI:未初始化全局变量(.bss)

模板代码分析:
头文件
1.2440addr.h
:       
s3c2440寄存器变量和地址
2.mmu.h,2440slib.h:
MMU函数
3.2440lib.h:         常用函数

代码:
1.init.s    初始化程序
2.mmu.c  
,2440slib.s   MMU函数
3.2440lib.c 
  常用函数
4.Main.c       主函数

下载时:
1.supervivi命令中:
【d】只下载到内存并执行,先运行Supervivi初始化CPU,RAM等,将代码下载到内存,跳到0x30000000d的init.o中运行,重新初始化中断,CPU,RAM,然后从init.o再跳到主函数运行
【a】将文件下载到nandFlash中
 
2.两根线:
USB下载线将文件下载到内存或flash用USB,需要安装USB驱动
串口线来传输命令,与用户进行交互,以用来控制,需要安装串口驱动

S3C2440包括8个端口供130个外部输入输出引脚
端口配置寄存器(GPACON 至GPJCON)
端口数据寄存器(GPADAT
至GPJDAT)
端口上拉寄存器(GPBUP 至GPJUP)

led

连接:
 LED1--nLED_1--S3C2440nXBACK/GPB5
 LED2--nLED_2--S3C2440nXBREQ/GPB6
 LED3--nLED_3--S3C2440nXDACK1/GPB7
 LED4--nLED_4--S3C2440nXDREQ1/GPB8

端口B 寄存器(GPBCON,GPBDAT,GPBUP)

LED配置:rGPBCON ->0x56000010
00=输入 01=输出 10=nXDREQ1 11=**
0000
0000 0000 0001 0101 0100 0000 0000
 rGPBCON=0x15400;
 或者:rGPBCON
|= (0x55 <<
10);
                      

led数据::rGPBDAT
->0x56000014
GPB[10:0],1灭,0亮。
0000,0000,0000,0000,0000,0001,1110,0000
   
//led1
    rGPBDAT |= (0xf <<
5);//四个灯全灭
    rGPBDAT &= ~(0x1 <<
5);//第N个灯亮,就将0001左移N位取反。

led上拉电阻:rGPBUP  ->0x56000018

置1用或1, |=(1<<n)     
0000100000
置0用与0,  &=~(1<<n)   
1111011111=~0000100000

按键:

连接:
k1 -- EINT8 --  EINT8/GPG0
K2 -- EINT11--
nSS1/EINT11/GPG3
K3 -- EINT13-- SPIMISO1/EINT13/GPG5
K4 -- EINT14--
SPIMOSI1/EINT14/GPG6
k5 -- EINT15-- SPICLK1/EINT15/GPG7
K6 -- EINT19--
TCLK1/EINT19/GPG11

按键配置:GPGCON->0x56000060
00=输入 01=输出 10=EINT【*】 11=**
0000 0000 0000
0000 0000 0000 0000 0000

按键数据:GPGDAT ->0x56000064
0000 0000 0000 0000 0000 0000 0000
0000

按键上拉电阻:GPGUP ->0x56000068

蜂鸣器:

GPB0

中断

1.外部中断源
外部中断控制寄存器:
EXTINT0
EINT0-7,[30:0]
000为低电平,001高电平,01*下降沿触发,10*上升沿,11*双边沿触发
0000 0000 0000 0000 0000 0000 0000
0000
EXTINT1
EINT8-15
0000 0000 0000 0000 0000 0000 0000
0000
EXTINT2
EINT16-23
0000 0000 0000 0000 0000 0000 0000 0000

EINTPEND:外部中断挂起寄存器
EINT[23:4] ,1为发生中断
0000 0000 0000 0000 0000 0000
0000 0000

EINTMASK:外部中断屏蔽寄存器
EINT[23:4] ,1为禁止中断,初始值为0x000FFFFF
0000 0000 1111
0111 0001 0110 1111 0000

2.内部中断源
SUBSRCPND:子源挂起寄存器
INTSUBMSK:

SRCPND:源挂起寄存器
INTMOD:
终端模式寄存器  -->
FIQ
INTMSK:中断屏蔽寄存器

*PRIORITY:优先级寄存器    


INTPND:中断挂起寄存器      
INTOFFSET:中断偏移寄存器

IRQ

中断控制程序的实现步骤:
主程序:
  
//1、清中断挂起。(SRCPND,INTPND,/SUBSRCPND)
  
2、端口初始化,定义外部端口为中断模式
   3、设置中断入口函数指针
  
4、设置中断触发方式
   5、开中断
中断处理函数:
  
1、关中断
   2、处理
  
3、清中断挂起。(SRCPND,INTPND,/SUBSRCPND)
   4、开中断
  
5、返回

时钟系统

XTLpll,XTOpll(晶振crystal)+OSC(振荡器oscillator)-->Fin(12MHZ)

-->Upll(USB Phase Locked Loop)
-->UCLK(48MHZ)用于USB设备                    

-->Mpll(锁相环Main Phase Locked
Loop)-->Mpll->CLKCNTL->FCLK用于内核(自由运行)      

         (Free running
)               

         ->HCLK用于AHB总线(高速)      

             
(Advanced High performance
Bus)
         
PCLK用于APB(外围低速)       

          (Advanced Peripheral
Bus)

*(LOCKTIME)锁定时间计数寄存器:rLOCKTIME => 0x4C000000
U_LTIME
M_LTIME,300us
1111 1111 1111 1111 /1111 1111 1111 1111

(MPLLCON和UPLLCON)PLL控制寄存器:rMPLLCON ->0x4C000004
MDIV MDIV SDIV

Mpll = ( 2 × m × Fin ) / ( p × 2s ) 
m = ( MDIV + 8 ), p = ( PDIV +
2 ), s = SDIV
0000 0000 0000 1001 0110 0000 0011 0000

*(CLKCON)时钟控制寄存器:rCLKCON ->0x4C00000C

(CLKDIVN)时钟分频控制寄存器: rCLKDIVN ->0x4C000014
HDIVN[2:1] ,PDIVN[0]
0000
0000 0000 0000 0000 0000 0000 0000

假设外部晶振产生12MHz的频率,要求:FCLK=400MHz,HCLK =
100MHz,PCLK=50MHz;问,寄存器该怎么样设置?
  400M = (2 * m * 12M)/p / 2
 
400 / 12 = m / p
  100 / 3
  m=100 MDIV=92
 
p=3   PDIV=1
  s=1   SDIV=1

400M = (2 * m * 12M) / p / 4
  400/6 = m / p
  200/3 =
m / p
  m=200 MDIV=192
  p=3   PDIV=1
 
s=2   SDIV=2

FCLK : HCLK = 4 : 1  ==>HDIVN [2:1]=10
  HCLK : PCLK =
2 : 1  ==>PDIVN [0] = 1

定时器中断与PWM

PCLK ->预分频TCFG0->分频TCFG1->
比较TCMPB0,计数TCNTB0
          *
TCMP0,  * TCNT0    ->TCNTO0(监视)   ->
TOUT0(PWM)
                  
     ->中断    
“PulseWidthModulation”

定时器配制寄存器 0(TCFG0): rTCFG0  -> 0x51000000
Prescaler 1[15:8] 定时器 2,3
和 4 的预分频值
Prescaler 0 [7:0] 定时器 0 和 1 的预分频值
0000 0000 0000 0000 0000 0000
/0000 0000

定时器配制寄存器 1(TCFG1):rTCFG1 ->0x51000004
MUX0[3:0]  MUX1[7:4] 
MUX2[11:8]  MUX3[15:12]  MUX4[19:16]  DMA模式[23:20]
0000
=1/2  0001=1/4  0010=1/8  0011=1/16  01xx =外部TCLK1
0000
0000 0000 0000 0000 0000 0000 0000

定时器控制寄存器 1(TCON): rTCON ->0x51000008
定时器 0 启动/停止 [0]
定时器 0 手动更新(注释)
[1]
定时器 0 输出变相开/关 [2]
定时器 0 自动重载开/关 [3]
0000 0000 0000 0000 0000 0000
0000 0000

定时器 0 计数缓冲寄存器和比较缓冲寄存器(TCNTB0/TCMPB0):TCNTB0
->0x5100000C
         TCMPB0
->0x51000010
定时器 0 比较缓冲寄存器 [15:0]
0000 0000 0000 0000 0000 0000 0000
0000
定时器 0 计数缓冲寄存器 [15:0]
0000 0000 0000 0000 0000 0000 0000 0000

*定时器 0 计数监视寄存器(TCNTO0):rTCNTO0 ->0x51000014
定时器 0 计数监视寄存器
[15:0]
0000 0000 0000 0000 0000 0000 0000 0000

看门狗定时器中断

PCLK  ->预分频->分频 ->WTDAT      

      WTCON    
WTCNT->RESET
    ->中断

看门狗定时器控制(WTCON)寄存器: rWTCON ->0x53000000
预分频值[15:8]  
看门狗定时器使能[5]  时钟选择(分频)[4:3]  中断使能[2]  复位使能/禁止[0]
0000 0000
0000 0000 0000 0000 000/0 0/000

看门狗定时器数据(WTDAT)寄存器 : rWTDAT ->0x53000004
计数重载值 [15:0]
0000
0000 0000 0000 0000 0000 0000 0000

看门狗定时器计数(WTCNT)寄存器: rWTCNT ->0x53000008
计数值 [15:0]
0000 0000
0000 0000 0000 0000 0000 0000

实时时钟

日历时间使用BCD码(二-十进制)来表示

RTCCON
         128hz ->TICNT
->节拍中断
XTIrtc,XTOrtc<36.785M>->分频器->1Hz->
BCDSEC,BCDMIN,BCDHOUR,BCDDATE,BCDDAY,BCDMON,BCDYEAR
       ALMSEC,ALMMIN,ALMHOUR,ALMDATE,       
ALMMON,ALMYEAR
        RTCALM 
->  INT_RTC中断

实时时钟控制(RTCCON)寄存器 :rRTCCON ->0x57000040(L)0x57000043(B)
RTCEN [0] ,
CLKSEL [1],CNTSEL [2], CLKRST [3]
0000 0000 0000 0000 0000 0000 0000 0000

节拍时间计数(TICNT)寄存器 :rTICNT ->0x57000044(L)0x57000047(B)
TICK 时间计数 [6:0]
,TICK INT 使能 [7]
0000 0000 0000 0000 0000 0000 0000 0000

RTC 闹钟控制(RTCALM)寄存器 :rRTCALM-> 0x57000050(L)
0x57000053(B)
SECEN[0],SECEN[0],HOUREN[2],DATEEN[3],DATEEN
[3],MONREN[4],YEAREN[5],ALMEN[6],ALMEN [6]
0 = 禁止 ,1 = 使能 
0000
0000 0000 0000 0000 0000 0000 0000

BCDSEC,BCDMIN,BCDHOUR,BCDDATE,BCDDAY,BCDMON,BCDYEAR
ALMSEC,ALMMIN,ALMHOUR,ALMDATE,    
ALMMON,ALMYEAR

串口UART

连接:
COM1:
->TTL转RS_232芯片->串口COM0输出
TXD0---TXD0/GPH2
RXD0---RXD0/GPH3
COM2:
TXD1---TXD1/GPH4
RXD1---RXD1/GPH5
COM3:
TXD2---TXD2/GPH6
RXD2---RXD2/GPH7

端口H配置GPHCON:rGPHCON ->0x56000070
00=输入, 01=输出 ,10=TXD[0],  11=保留

 端口配置:TXD0/GPH2sRXD0/GPH3
rGPHCON = 0xa0;//将GPH2和3作为串口数据线使用
0000
0000 0000 0000 0000 0000 00/00 0000

波特率分频寄存器:UBRDIVn: 
UBRDIV0->0x50000028,UBRDIV1->0x50004028,UBRDIV2->0x50008028
UBRDIVn
=int( PCLK / 波特率 / 16) - 1
一般rUBRDIVn = 6;//115200HZ
   
rUBRDIVn =324;//9600HZ
0000 0000 0000 0000 0000 0000 0000 0000

UART 线路控制寄存器 :
rULCON0->0x50000000,ULCON1->0x50004000,ULCON2->0x50008000
保留[7] ,
红外模式[6] ,奇偶校验模式[5:3] ,停止位数[2], 字长度[1:0]
00=5位 ,01=6位, 10=7位, 11=8位
0 =
每帧1个停止位  , 1= 每帧2个停止位
0xx = 无奇偶校验
0 = 普通模式操作 1 = 红外Tx/Rx
模式
一般rULCON0=0x03// 数据位8位,停止位1位,无奇偶检验位,普通模式
0000 0000 0000 0000 0000 0000
0/0/00  0/0/00

UCON:控制寄存器: UCON0 ->0x50000004,UCON1 ->0x50004004 ,UCON2
->0x50008004
FCLK 分频器[15:12] ,时钟选择[11:10],Tx 中断类型[9],Rx 中断类型[8]
,Rx超时使能[7],Rx错误状态中断使能[6],环回模式[5],发出断点信号[4],
Transmit Mode [3:2], Receive
Mode [1:0]
00 = Disable, 01 = 中断或者查询方式,
10 = DMA0 request (Only for
UART0),DMA3 request (Only for UART2)
11 = DMA1 request (Only for
UART1)
//串口数据的收发采用中断或者查询方式,异常时允许UART产生中断,如果使用中断方式进行数据收发,中断触发的方式为电平触发
rUCON0 
= 0x245;
0000 0000 0000 0000 0000 /00/0/0/  0/0/0/0  /00/00

*UFCON(0-2):FIFO控制寄存器

*UMCON:MODEM 控制寄存器

UTRSTAT:TX/RX
状态寄存器:UTRSTAT0->0x50000010,UTRSTAT1->0x50004010,UTRSTAT2->0x50008010

发送器空[2],发送缓冲器空 [1],接收缓冲器数据就绪 [0]
0为不可收发,1为可收发
0000 0000 0000 0000
0000 0000 0000 0000

*UFSTAT:FIFO 状态寄存器

*UMSTAT:MODEM 状态寄存器

*UERSTAT:错误状态寄存器

UTXH(0-2):发送缓冲寄存器

URXH:接收缓冲寄存器

AD转换:
模拟->数字
连接:

电位器---AIN0---AIN0
   AIN1---AIN1
  
AIN2---AIN2
   AIN3---AIN3
触摸屏: TSYM---AIN4/TSYM  

   TSYP---AIN5/TSYP
  
TSXM---AIN6/TSXM
   TSXP---AIN7/TSXP

A --> MUX ->  A/D Converter  -> ADC interface 
->Interrupt Generation -> INT_ADC
      
&Touch Screen      INT_TC

       Control

ADC 控制寄存器(ADCCON):rADCCON -> 0x5800000
ECFLG [15] ,PRSCEN [14] , PRSCVL
[13:6], SEL_MUX [5:3] , STDBM [2] , READ_ START [1] , ENABLE_START
[0]
rADCCON =
0;                          
//工作模式设置为工作模式
rADCCON &= ~(0x7 << 3);  
//模拟输入通道选择,选择通道0(AIN0)
rADCCON |= 24 <<
6;       //A/D 转换器预分频值,设置为2MHz , 50MHz /
25    (最大为2.5MHZ)
rADCCON |= 1 << 14;   //A/D
转换器预分频器使能
0000 0000 0000 0000 0/0/11 1111 11/00  0/1/0/0

ADC 转换数据寄存器(ADCDAT0): ADCDAT0 ->
0x580000C
转换精度为10位。
 rADCCON |= 1;     
    //使能 A/D 转换启动,该位应该在第[1]位为0的时候来启动
 while(!(rADCCON
& 0x1 << 15)); //转换结束标志位(只读),转换没有结束,等待
 rADCCON |= 1 <<
1;            
//读启动
 res = rADCDAT0 & 0x3ff;   //读取数据
0000 0000 0000
0000 0000 0000 0000 0000

触摸屏

子中断INT_ADC_S,INT_TC -> 中断INT_ADC

ADC 触摸屏控制寄存器(ADCTSC): rADCTSC -> 0x5800004
UD_SEN[8],YM_SEN[7]
,      AUTO_PST[2],XY_PST[1:0],
rADCTSC =
0xd3;   //等待中断模式,YM 输出驱动器使能
    
0000   1101   0011
0000 0000 0000 0000 0000 0000
/01/01  1/0/00

ADC 启动延时寄存器(ADCDLY): rADCDLY -> 0x5800008
DELAY [15:0]

0000 0000 0000 0000 0000 0000 1111 1111

ADC 转换数据寄存器(ADCDAT0): rADCDAT0 -> 0x580000C
UPDOWN[15] ,AUTO_PST[14]
,XY_PST[13:12] ,保留 [11:10], XPDATA (正常 ADC) [9:0]
0000 0000 0000 0000 0000
00/00 0000 0000

ADC 转换数据寄存器(ADCDAT1): rADCDAT1 -> 0x5800010
YPDATA [9:0]
0000 0000
0000 0000 0000 00/00 0000 0000

ADC 触摸屏起落中断检测寄存器(ADCUPDN): rADCUPDN -> 0x5800014
TSC_UP[1]
,TSC_DN[0]
笔尖抬起中断 ,笔尖落下中断
0000 0000 0000 0000 0000 0000 0000 0000

1.设置ADCTSC,触摸屏为等待中断模式,检测笔尖落下。打开YM,PULL_UP

2.INT_TC发生后,设置ADCTSC,选择X,Y坐标转换模式(自动)。关闭PULL_UP,启动AD转换
3.轮询法,通过中断挂起INTPND(INT_ADC)产生后,获取xy坐标。重新等待中断模式,等待笔尖抬起,打开YM,PULL_UP。
4.抬起后,显示坐标值。
5,返回步骤1.等待中断,检测笔尖落下,打开YM,PULL_UP

LCD显示屏
lcd: liquid crystal display

连接:
 控制线--GPC[7:0]
 数据线:
 VD[7:0]--GPC[15:8]
 VD[23:8]--GPD[15:0]

LCD控制器  --> LCD驱动器 --> LCD显示屏
  
1.静态驱动
   2.简单矩阵驱动:TN 扭转向列型;STN 超转向列型
  
3.主动矩阵驱动:TFT(薄膜场效应晶体管Thin FilmTransistor)

REGBANK ->TIMEGEN -> VIDEO MUX-> 控制信号VSYNC (帧(垂直)同步Vertical
sync. Signal)
    
LPC3600        HSYNC (行(水平)同步Horizontal sync.
Signal)
          VCLK 
(像素时钟Pixel clock
signal)
          VD[23:0](Pixel
Data )
          VDEN 
(pixel data Eable)
         
LEND (Line END)

LCDCDMA -> VIDPRCS  ->   DMA 数据传输

CLKVAL = HCLK / VCLK / 2 - 1 = 6
VCLK=HCLK÷[(CLKVAL+1)×2] =
7.1MHz

VSYNC 帧同步信号周期:
 垂直同步信号脉宽VSPW     vertical 
sync pulse width
 垂直同步信号后肩(VBPD) vertical back
porch
 LINEVAL                
320-1
 垂直同步信号前肩(VFPD) vertical front porch
   
(VSPW+1)+(VBPD+1)+
LINEVAL+1+(VFPD+1)
 
场频:VSF=HSF÷[(VSPW+1)+(VBPD+1)+(VFPD+1)+(LINEVAL+1)]
 =21.8÷(20+10+10+240)=77.8Hz

HSYNC 行同步信号周期:
 水平同步信号脉宽HSPW     horizontal sync
pulse width
 水平同步信号后肩(HBPD) horizontal back porch
 HOZVAL 
   240-1
 水平同步信号前肩(HFPD)horizontal front
porch
    (HSPW+1)+(HBPD+1)+ (HOZVAL + 1) + (HFPD+1)

HSF=VCLK÷[(HSPW+1)+(HSPD+1)+(HFPD+1)+(HOZVAL+1)]
    
=7.1M÷(6+320)=21.8kHz

LCD 控制 1 寄存器:LCDCON1 -> 0X4D000000
LINECNT(只读) [27:18],CLKVAL
[17:8],MMODE [7],PNRMODE [6:5],BPPMODE [4:1],ENVID [0]
TFT:VCLK = HCLK /
[(CLKVAL + 1) × 2]    (CLKVAL≥0)
11 = TFT LCD 面板
1000 = TFT
的 1 bpp
1001 = TFT 的 2 bpp
1010 = TFT 的 4 bpp
1011 = TFT 的 8 bpp

1100 = TFT 的 16 bpp
1101 = TFT 的 24 bpp
0 = 禁止视频输出和 LCD 控制信号
1 =
允许视频输出和 LCD 控制信号
0000 0000 0000 00/00 0000 0000/ 0/00/0 000/0

LCD 控制 2 寄存器: LCDCON2 -> 0X4D000004
VBPD[31:24], LINEVAL[23:14],
VFPD[13:6],VSPW[5:0]
0000 0000/ 0000 0000 00/00 0000 00/00 0000

LCD 控制 3 寄存器:LCDCON3 -> 0X4D000008
HBPD(TFT)[25:19] ,HOZVAL[18:8]
, HFPD(TFT)[7:0]
0000 0000 0000 0/000 0000 0000 /0000 0000

LCD 控制 4 寄存器:LCDCON4 -> 0X4D00000C
MVAL[15:8], HSPW(TFT)[7:0]
0000
0000 0000 0000 0000 0000 /0000 0000

*LCD 控制 5 寄存器:LCDCON5 -> 0X4D000010

帧缓冲器开始地址 1 寄存器 :LCDSADDR1 -> 0X4D000014
LCDBANK [29:21] , LCDBASEU
[20:0]
系统存储器中视频缓冲器的 bank 位置的 A[30:22]
对于单扫描 LCD:这些位表明 LCD 帧缓冲器的开始地址的
A[21:1]。
0000 0000 0000 /0000 0000 0000 0000 0000

帧缓冲器开始地址 2 寄存器: LCDSADDR2 -> 0X4D000018
LCDBASEL [20:0]
对于单扫描
LCD:这些位表明 LCD 帧缓冲器的结束地址的 A[21:1]。
LCDBASEL = ((帧结束地址) >> 1) + 1 

           = LCDBASEU

(PAGEWIDTH+OFFSIZE) × (LINEVAL+1)
0000 0000 0000 0000 0000 0000
0000 0000

帧缓冲器开始地址 3 寄存器:LCDSADDR3 -> 0X4D00001C
OFFSIZE [21:11] ,PAGEWIDTH
[10:0]
虚拟屏偏移尺寸(半字数)
虚拟屏页宽度(半字数)
0000 0000 0000 0000 0000 0/000 0000
0000

LCD初始化

1.端口初始化,GPCCOM,GPDCON

2.显示模式初始化

3.帧缓冲初始化

将图像写入帧缓冲

时间: 2024-10-08 10:47:01

ARM逻辑驱动学习笔记的相关文章

第十七篇:曲径通幽处,禅房花木深--初探WDDM驱动学习笔记(一)

正好需要对WINDOWS的WDDM有所了解, 于是就翻了下MSDN. 微软对设备驱动的框架设计非常周全. 无论WDDM, AVSTREAM, 还是USB STACK, STORAGE, 以及其它技术类型的设备驱动, 都是以port/miniport, class/miniclass的形式展开, 微软将经过严密设计,开发,测试的port/class驱动提供给IHV,而IHV只需要把工作重心放到mini驱动的开发上去, 大大降低了项目风险, 人力成本,以及时间成本. AVSTREAM是PCTV的框架

ARM基础知识学习笔记

/*****************数电知识*******************/ PN结(Positive-Negative) 三极管:BJT(双极结型三极管Bipolar Junction Transistor)               FET(场效应管Field Effect Transistor)          (单极结型) 1.MOSFET (金属氧化物半导体Metal Oxide Semiconductor FET)               2.JFET(结型Junct

linux 驱动学习笔记01--Linux 内核的编译

由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make config(基于文本的最为传统的配置界面,不推荐使用)#make menuconfig(基于文本菜单的配置界面)#make xconfig(要求 QT 被安装)#make gconfig(要求 GTK+被安装)在配置 Linux 2.6 内核所使用的 make config. make menuconfig. mak

第十七篇:实例分析(3)--初探WDDM驱动学习笔记(十)

续: 还是记录一下, BltFuncs.cpp中的函数作用: CONVERT_32BPP_TO_16BPP 是将32bit的pixel转换成16bit的形式. 输入是DWORD 32位中, BYTE 0,1,2分别是RGB分量, 而BYTE3则是不用的 为了不减少color的范围, 所以,都是取RGB8,8,8的高RGB5, 6, 5位, 然后将这16位构成一个pixel. CONVERT_16BPP_TO_32BPP是将16bit的pixel转换成32bit的形式 输入是WORD 16BIT中

第十七篇:实例分析(4)--初探WDDM驱动学习笔记(十一)

感觉有必要把 KMDDOD_INITIALIZATION_DATA 中的这些函数指针的意思解释一下, 以便进一步的深入代码. DxgkDdiAddDevice 前面已经说过, 这个函数的主要内容是,将BASIC_DISPLAY_DRIVER实例指针存在context中, 以便后期使用, 支持多实例. DxgkDdiStartDevice 取得设备信息, 往注册表中加入内容, 从POST设备中获取FRAME BUFFER以及相关信息(DxgkCbAcquirePostDisplayOwnershi

第十七篇:博采众长--初探WDDM驱动学习笔记(七)

基于WDDM驱动的DirectX视频加速重定向框架设计与实现 现在的研究生的论文, 真正质量高的, 少之又少, 开题开得特别大, 动不动就要搞个大课题, 从绪论开始到真正自己所做的内容之间, 是东拼西凑地抄概念, 抄公式, 达到字数篇幅的要求, 而自己正真做了什么, 有哪些实际感受, 做出的内容, 相比前面的东拼西凑就几点内容, 之后就草草结束, 步入感谢的段落. 原因不光只有学生自己, 所谓的读研, 如果没有一个环境, 学生有再大的愿望, 再强的毅力, 到头来也只是空无奈. 有些导师要写书,

嵌入式驱动学习笔记

驱动学习笔记 输入子系统概念介绍 嵌入式驱动学习笔记,布布扣,bubuko.com

八、蜂鸣器驱动--学习笔记

第八章.蜂鸣器驱动--学习笔记 蜂鸣器是 S3C6410 开发板上带的一个硬件设备.可以通过向寄存器写入特定的值来控制蜂鸣器 发出尖叫声.本节将介绍蜂鸣器实现原犁,并实现一个完整的蜂呜器驱动(可以打开和关闭蜂鸣器).PWM驱动的实现方式不同于LED驱动,PWM驱动将由多个文件组成.这也是大多数i n u x驱动的标准实现方式.也就是说--个复杂的驱动不太可能将所有的代码都放在…个文件中.最好将相关的代码放在相应的文件中.在编译L i n u x驱动时将这些文件进行联合编译.本节将介绍把Li n

展讯i2c驱动学习笔记&lt;一&gt;

################################################################################################### 问题一:i2c设备是如何被系统所识别的? 问题二:i2c设备和设备驱动是怎么找到彼此的? 问题三:i2c设备是怎么工作的? 问题四:用户(应用程序)是如何操作i2c设备的?换句话说,i2c设备驱动为用户提供了哪些操作接口? --------------------------------------