分类: 嵌入式
2011-02-16 10:40:00
关于2440的录放音:
IIS总线(5根):IISDO(数据输出),IISDI(数据输入),IISSCLK(系统串行时钟)每个时钟用于传送一位音频信号 = 采样频率 * 声道数 * 每声道位数,IISLRCK(等于采样频率),CDCLK CDCLK为该芯片提供系统同步时钟,即编解码时钟,主要用于音频的A/D、D/A采样时的采样时钟,一般CDCLK为256fs或384fs。IIS只负责数字音频信号的传输,而要真正实现音频信号的放、录,还需要额外的处理芯片(在这里,我们使用的是UDA1341)。
L3总线(3个引脚):L3MODE(低电平表示数据线上传输的L3的各种模式,即DATA0,DATA1,STATUS),L3DATA(每次传输8位数据,数据或地址),L3CLK(L3的时钟控制)。
中断和异常
异常为ARM的5种异常模式(SVC,UND,ABT,IRQ,FIQ),中断为板级的概念外部的各种数据中断(LCD,NET,USB,UART,DMA)中断通过IC(中断控制器UIRQ,UFIRQ)最终到达ARM变位中断异常(IRQ)或快速中断异常(FIQ)
SVC模式下关于SWI软中断异常。
模拟操作系统的系统调用过程:
1.开始时arm处于SVC模式,
2.系统启动,从SVC模式跳入用户模式下
mov r0,#0xD0
MSR cpsr_cxsf, r0
1. 执行用户态的程序
2. 调用系统调用
Swi 0x0; 产生软件中断
3. 执行系统程序
4. 调回用户态(usr)
Swi 0x0
Movs pc, lr; 回复PC并回复CPSR
关于movs为何不能用两条指令代替:若先mov pc,lr 则不会执行到MSR 改变模式, 若先改变模式,则访问到的lr不是改变状态前的lr寄存器(模式改变寄存器 也为不同的寄存器)
异常:
1、 修改CPU模式由SVC模式为用户模式
2、 分别设好SVC和USER模式的sp
3、 进入C 代码,注册SVC_handler(汇编)0x8 = b handler
4、 用内嵌汇编 产生软中断SWI 0X0(触发异常)
5、 PC跳转0x8处执行B指令。
6、 硬件响应(pc – >lr, cpsr->spsr, cpsr->IRQ, pc<-0x8);
7、 将r0-r12 和 lr保存(包括硬件的PC CPSR 软件的R0-R12 , LR, SPSR)
8、 调用中断处理函数
9、 恢复r0-r12 和 lr
10、 恢复用户模式并返回PC。Movs pc lr 或(LDMFD sp!,{R0-R12, pc}^)
中断:
1. 0x18:irq_handler注册中断函数。
2. 设置SVC 和IRQ的sp。
3. 返回SVC。
4. 设置GPFCON 设置位中断有效。
5. 设置EXTINT0 设置触发模式 上升沿或下降沿。
6. (清除以前的PND)检测SRCPND 是否有中断产生。(中断控制器)。
7. 设置INTMASK使掩码打开。(中断控制器)
8. (清除以前的PND)检测INTPND是否有中断通过。(中断控制器)
9. 打开IRQ模式下的中断位(CPSR)。
10. 进入ARM硬件响应(pc – >lr, cpsr->spsr, cpsr->IRQ, pc<-0x18)。
11. 将r0-r12 和 lr保存。
12. 调用中断处理函数。
13. 恢复r0-r12 和 lr。
14. subs pc, lr,#4。(快速中断情况下执行lr中下一条指令)
bootloader总结:
1. 控制IO有两种GPIO和CPLD ,LED 由CPLD实现,BEEP ,DIP,BUTTUN(KEY)由GPIO实现。
2. UART 串口初始化(起始位,数据位,停止位,奇偶校验,波特率),时钟分频设置,设置IO功能服用,设置为输入。串口读写(判断STAT寄存器)。实现STDIO标准IO。可移植性。
3. 实现了 download go 命令用Xmodem下载和执行BIN文件。
4. 关于NANDflash的驱动读写。数据线和地址线的复用。实现boot的固化和自加载。
5. IIS和L3总线实现对UDA1341的音频信号的输入输出,用软件实现L3总线。WAV的文件格式。
6. 异常,中断,DMA。DMA-player。DMA工作原理。