以下是我对于uart1的设计思路,请帮我分析一下:
1、注册中断服务程序:
修改ipnc_mcfw\mcfw\src_bios6\cfg\ti814x\BIOS_m3vpss.cfg文件,在Programe.heap段添加一个中断服务程序(响应中断),添加到注释段“/* CSI2 interrupt */”的上面一行。添加的内容如下:
var uart_hwi_param_0= new Hwi.Params;
uart_hwi_param_0.arg = 0;
Hwi.create(44, ‘&uart1_isr_callback’, uart_hwi_param_0);
2、初始化uart1:
设计一个函数Uart1Init(),该函数可以考虑放在 ipnc_rdk\ipnc_mcfw\mcfw\src_bios6\links_m3vpss\system\System_m3vpss.c文件中的System_init()函数体内,对uart1进行初始化。
设置步骤,参考TI 8148手册:
步骤一:UART软件重置
LCR=BFh; 使EFR寄存器可被操作。
EFR[4] = 1; 使IER、MCR寄存器可被操作。
LCR[7] =0; 使IER、MCR寄存器可被操作。
IER=0; 使中断无效。
MCR=0; 使moden无效。
LCR[6] = 0; 使信号无效。
MDR1=7h; 使UART重置或无效。
步骤二:UART FIFO配置
MCR[6] = 1;使TLR、TCR可被操作,EFR[4]在上面已被置成1,这里略去。
设置需要的值到TLR、TCR、FCR三个寄存器中,在本次设计中:
TLR[7:4] = 0;
TCR=0;
SCR[7] = 0;
DLL=0;
DLH=0;
FCR[0]=1;
FCR[3]=0;
FCR[7:6]=0
设置完成后,为防止被其他程序修改,设置:
LCR=BFh;
EFR[4]=0;
LCR[7]=0;
MCR[6]=0。
步骤三:波特率设置并退出设置状态
LCR[7] = 1;使DLL、DLH寄存器可被操作。
波特率采用57600bps,查8148参考手册,如果时钟不同,需要计算,(方式:
波特率发生器模块时钟源为VPB时钟(pclk);分频值(Fdiv);Baud Multiple(16x)Fdiv=Fpclk/(16*baud),上面的值是时钟源为48-MHz 情况下的值)
DLL=34h;
DLH=00h;设置波特率为57600bps。
LCR[7]=0;使DLL,DLH不可被操作。
IER[0]=1;允许接收UART信号中断
MDR1[2:0]=0;设置UART为16x模式,而不是自动波特率模式
到这里,UART模块可以被使用了。
??数据位、停止位、校验位、流控在哪些寄存器中设置??
3、中断服务程序实现:
经过以上步骤,是否可以接收到中断信号??
在中断服务函数中,我应该如何获取RHR寄存器的fifo数据??
4、uart寄存器的定义,是否可以使用iss_02_80_00_00\packages\ti\psp\iss\hal\cred_cram\cred\inc\cortexm3_sys_ape\Uart_cred.h
中的定义?并且在Uart_cred.h中无法找到如下的寄存器定义:
EFR,IER,TLR,TCR,DLL,DLH?我在8148和8127的datasheet上都没有找到。
参考的文档为:
DM8127_DM_f9_09_15_11_DATED9072011.pdf
tms320dm814x Davinci digital media processor (sprugz8).pdf
请帮我分析上面的设计思路,并给出建议和解决方法。
谢谢!