搜索
bottom↓
回复: 10

RT-thread在s3c6410上移植后串口不能中断接受的问题

[复制链接]

出0入0汤圆

发表于 2011-7-16 23:09:55 | 显示全部楼层 |阅读模式
移植了RT-thread到6410上,现在开了5个任务,任务之间可以切换,说明系统运行正常,使用定时器4作为系统中断时钟,可以正常使用。但是shell组件需要用串口输入,好几天了都不能发生串口中断,所以shell组件还不能运行,求助有没有移植成功的啊?我根据手册写寄存器,串口初始化应该成功了,因为可以打印出logo还有任务切换信息。但是就是不能发生串口终端接收,这样shell线程也就不能获取信号量。请问谁有6410中断接受的例子吗,指点一下!谢谢

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-7-16 23:19:03 | 显示全部楼层
tick能中断.看来主要得查串口的配置了.

出0入0汤圆

发表于 2011-7-16 23:34:25 | 显示全部楼层
参考下2440的,估计6410与2440比较相像吧

出0入0汤圆

 楼主| 发表于 2011-7-17 09:26:06 | 显示全部楼层
回复【1楼】aozima  
-----------------------------------------------------------------------
系统时钟中断部分移植成功了,所以串口处理部分应该没什么问题,串口也能输出,而且查询方式下也能输入了,这说明串口部分应该没什么问题,关于中断方式的设置,我看了数据手册,发现在串口寄存器中没有单独的中断控制位,默认就是打开的,所以只要在中断控制器那边打开并设置好中断处理函数就可以了,但是现在就是发生不了中断,按理说我设施了发送中断和接受中断,所以发送完成后也要发生中断,但是实际情况是没有的。不知道是不是数据手册有问题还是其他什么。


回复【2楼】ffxz  
-----------------------------------------------------------------------
现在的情况估计不是移植哪儿出问题了,问题就是串口接受不了发生中断,我在中断程序里面添加了打印消息和点亮LED的调试程序,但是一直都没进中断。所以想问问哪位是不是有移植好的串口中断方式的程序,参考一下我的哪儿有问题

出0入0汤圆

 楼主| 发表于 2011-7-17 09:28:47 | 显示全部楼层
/// Normal Mode, No Parity, 1 Stop Bit, 8 Bit Data
    s3c_writel(0x0003, ULCON0);
    // PCLK divide, Polling  or 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[DivSlot];
    s3c_writel(0x80, UDIVSLOT0);

这是我的串口设置程序,请大家帮看看!

出0入0汤圆

发表于 2011-7-17 10:45:08 | 显示全部楼层
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);

出0入0汤圆

 楼主| 发表于 2011-7-17 15:08:44 | 显示全部楼层
回复【5楼】shaolin  
-----------------------------------------------------------------------
初始化串口没什么问题,查询法可以发送和接受,现在就是不能用中断法,shell里面就是用中断,我看6410的数据手册除了全局中断里面有串口的开启位之外,在串口寄存器中也有,但是默认是打开的(看数据手册)不知道是数据手册错了还我理解错了。全局的那个我已经打开了,中断函数也已经按放上去了(6410有向量中断控制器,每一个中断都有一个寄存器来存放其终端处理函数地址。所以其中断不是用2440的那样使用一个中断函数数组来表示的)时钟中断能发生,说明全局中断这部分应该没什么问题了,现在就是怀疑是不是数据手册哪儿出问题了,想问问有没有那位大虾已经实现了串口中断方式接受或者发送

出0入31汤圆

发表于 2011-7-17 15:36:39 | 显示全部楼层
看一下关于uart的那几个中断相关的寄存器,这个应该很好查的

出0入0汤圆

发表于 2011-7-17 15:59:04 | 显示全部楼层
"但是默认是打开的"

即使初始值就是我们需要的.但一般初始化时还是再写一遍.
不然可能会出现郁闷的问题.(比如bootloader里面改动了)
虽然问题可能不在这.但这个坏习惯要改正.

出0入0汤圆

 楼主| 发表于 2011-7-17 16:30:10 | 显示全部楼层
回复【8楼】aozima  
-----------------------------------------------------------------------
谢谢,回头看看把默认值也重新写一下

出0入0汤圆

发表于 2011-12-21 19:49:42 | 显示全部楼层
我现在也配到类似的情况,lpc2378,不知道是中断接收的问题还是中断配置什么的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-6-11 19:16

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表