RT-thread在s3c6410上移植后串口不能中断接受的问题
移植了RT-thread到6410上,现在开了5个任务,任务之间可以切换,说明系统运行正常,使用定时器4作为系统中断时钟,可以正常使用。但是shell组件需要用串口输入,好几天了都不能发生串口中断,所以shell组件还不能运行,求助有没有移植成功的啊?我根据手册写寄存器,串口初始化应该成功了,因为可以打印出logo还有任务切换信息。但是就是不能发生串口终端接收,这样shell线程也就不能获取信号量。请问谁有6410中断接受的例子吗,指点一下!谢谢 tick能中断.看来主要得查串口的配置了. 参考下2440的,估计6410与2440比较相像吧 回复【1楼】aozima-----------------------------------------------------------------------
系统时钟中断部分移植成功了,所以串口处理部分应该没什么问题,串口也能输出,而且查询方式下也能输入了,这说明串口部分应该没什么问题,关于中断方式的设置,我看了数据手册,发现在串口寄存器中没有单独的中断控制位,默认就是打开的,所以只要在中断控制器那边打开并设置好中断处理函数就可以了,但是现在就是发生不了中断,按理说我设施了发送中断和接受中断,所以发送完成后也要发生中断,但是实际情况是没有的。不知道是不是数据手册有问题还是其他什么。
回复【2楼】ffxz
-----------------------------------------------------------------------
现在的情况估计不是移植哪儿出问题了,问题就是串口接受不了发生中断,我在中断程序里面添加了打印消息和点亮LED的调试程序,但是一直都没进中断。所以想问问哪位是不是有移植好的串口中断方式的程序,参考一下我的哪儿有问题 /// Normal Mode, No Parity, 1 Stop Bit, 8 Bit Data
s3c_writel(0x0003, ULCON0);
// PCLK divide, Pollingor Interrupt Mode
regv = (1<<9) | (1<<8) | (1<<2) | (1<<0);
s3c_writel(regv, UCON0);
// Disable FIFO
s3c_writel(0x0000, UFCON0);
// Disable Auto Flow Control
s3c_writel(0x0000, UMCON0);
DIV=PCLK/(BPS*16)-1; 66000000/(115200*16)-1;
s3c_writel(DIV, UBRDIV0);
for (regv=0; regv<0x100; regv++);
//aSlotTable;
s3c_writel(0x80, UDIVSLOT0);
这是我的串口设置程序,请大家帮看看! mini2440中uart是这样配置的,供参考
/* UART0 port configure */
GPHCON |= 0xAA;
/* PULLUP is disable */
GPHUP |= 0xF;
/* FIFO enable, Tx/Rx FIFO clear */
uart0.uart_device->ufcon = 0x0;
/* disable the flow control */
uart0.uart_device->umcon = 0x0;
/* Normal,No parity,1 stop,8 bit */
uart0.uart_device->ulcon = 0x3;
/*
* tx=level,rx=edge,disable timeout int.,enable rx error int.,
* normal,interrupt or polling
*/
uart0.uart_device->ucon = 0x245;
/* Set uart0 bps */
uart0.uart_device->ubrd = (rt_int32_t)(PCLK / (BPS * 16)) - 1;
/* output PCLK to UART0/1, PWMTIMER */
CLKCON |= 0x0D00;
/* install uart0 isr */
INTSUBMSK &= ~(BIT_SUB_RXD0);
rt_hw_interrupt_install(INTUART0, rt_serial0_handler, RT_NULL);
rt_hw_interrupt_umask(INTUART0); 回复【5楼】shaolin
-----------------------------------------------------------------------
初始化串口没什么问题,查询法可以发送和接受,现在就是不能用中断法,shell里面就是用中断,我看6410的数据手册除了全局中断里面有串口的开启位之外,在串口寄存器中也有,但是默认是打开的(看数据手册)不知道是数据手册错了还我理解错了。全局的那个我已经打开了,中断函数也已经按放上去了(6410有向量中断控制器,每一个中断都有一个寄存器来存放其终端处理函数地址。所以其中断不是用2440的那样使用一个中断函数数组来表示的)时钟中断能发生,说明全局中断这部分应该没什么问题了,现在就是怀疑是不是数据手册哪儿出问题了,想问问有没有那位大虾已经实现了串口中断方式接受或者发送 看一下关于uart的那几个中断相关的寄存器,这个应该很好查的 "但是默认是打开的"
即使初始值就是我们需要的.但一般初始化时还是再写一遍.
不然可能会出现郁闷的问题.(比如bootloader里面改动了)
虽然问题可能不在这.但这个坏习惯要改正. 回复【8楼】aozima
-----------------------------------------------------------------------
谢谢,回头看看把默认值也重新写一下 我现在也配到类似的情况,lpc2378,不知道是中断接收的问题还是中断配置什么的
页:
[1]