搜索
bottom↓
回复: 11

arm使用dbgu发送中断出现的问题

[复制链接]

出0入0汤圆

发表于 2006-6-9 14:14:00 | 显示全部楼层 |阅读模式
以下为arm的dbgu初始化程序和中断程序:

void AT91F_DBGU_Init(void)

{

        AT91F_DBGU_CfgPIO();

        ( ( AT91PS_USART ) AT91C_BASE_DBGU )->US_CR = ( AT91C_US_RSTTX |AT91C_US_RSTRX );

        AT91F_US_Configure (

                ( AT91PS_USART ) AT91C_BASE_DBGU,      

                MCK,

                AT91C_US_ASYNC_MODE ,                 

                AT91C_DBGU_BAUD ,                     

                0 );

        ( ( AT91PS_USART )AT91C_BASE_DBGU )->US_CR = ( AT91C_US_RXEN | AT91C_US_TXEN );

        AT91F_US_EnableIt((AT91PS_USART) AT91C_BASE_DBGU,AT91C_US_RXRDY | AT91C_US_ENDTX);

        AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_SYS,

                                                        USART_SYS_LEVEL,

                                                        AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE,

                                                        DBGU_irq_handler );

        AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_SYS);

}



void DBGU_irq_handler(void)

{

    unsigned char re_data_ud, re_status_dbgu = 0;

    re_status_dbgu = (*AT91C_DBGU_CSR & 0x11);

    if (re_status_dbgu) {

            re_data_ud = ( *AT91C_DBGU_RHR & 0x1FF );                                                /*接收中断处理*/

                    if ('X' == re_data_ud ) {                                                                                /*起始*/

                    re_local_index = 0;

                    re_head_ud = 1;

                    re_local_index++;

                    return;

            }

            if ( 'M' == re_data_ud ) {                                                                                /*结束*/

                    if( 15 < re_local_index ) {

                            re_head_ud = 0;

                            re_local_index = 0;

                            return;

                    }

                    re_local_is_ok = 1;                                                                                        /*一包数据传递完毕,设置标志位*/

                    re_head_ud = 0;

                    re_local_index = 0;

                    /*

                    AT91F_PIO_ClearOutput( AT91C_BASE_PIOA, STATUS );

                    */

                    return;

            }

            if ( 15 < re_local_index ) {

                    re_head_ud = 0;

                    re_local_index = 0;

                    return;

            }

            else {

                    if ( 1 != re_head_ud ) {

                            re_local_index = 0;

                            re_head_ud = 0;

                            return;

                    }

                    strRxBuff[re_local_index] = re_data_ud;                                                /*正文数据*/

                    re_local_index++;

                    if ( 16 < re_local_index ) {

                            re_head_ud = 0;

                            re_local_index = 0;

                    }

                   }

           }

           if((re_status_dbgu & 0x10) >> 4)

           {

                        if((local_tx_buff[tx_local_index] == '/0') || (tx_local_index > 15))

                        {

                                tx_local_index = 1;

                                return;         

                   }

                   *AT91C_DBGU_THR = local_tx_buff[tx_local_index++];

                }

}





在开始运行后不久就进入了中断,但是并未接受到或者需要发送人和数据。一开始re_status_dbgu数据为0,当运行完if((re_status_dbgu & 0x10) >> 4)判断之后,跳入了该if判断成功后的语句if((local_tx_buff[tx_local_index] == '/0') || (tx_local_index > 15)),并且此时re_status_dbgu值为0x000000CD。并且在其后的时间不断重复该循环,但是我们至今没有找到问题所在。我想请问一下是哪里有出错的地方。

出0入0汤圆

发表于 2006-6-21 10:16:54 | 显示全部楼层
请问你用的什么仿真器?

出0入0汤圆

发表于 2006-6-21 23:40:29 | 显示全部楼层
DBGU不建议使用中断,这个中断为系统中断,与其他共用;

出0入0汤圆

发表于 2007-8-5 20:03:31 | 显示全部楼层
请注意这里'/0'   

'\0' '/0'  是不同的

出0入0汤圆

发表于 2008-12-3 14:03:19 | 显示全部楼层
近来在&nbsp;研究DBGU&nbsp;&nbsp;找不到什么&nbsp;资料,不过看了你这个例子,我&nbsp;明白你的&nbsp;问题出在哪里了

看这句AT91F_US_EnableIt((AT91PS_USART)&nbsp;AT91C_BASE_DBGU,AT91C_US_RXRDY&nbsp;|&nbsp;AT91C_US_ENDTX);



问题是&nbsp;&nbsp;&nbsp;AT91C_US_ENDTX&nbsp;&nbsp;这个不该加,因为这个表示发送缓冲器空中断,而你没有发送数据。

所以发送缓冲器为空,故一直会进入中断

出0入0汤圆

发表于 2008-12-3 17:06:49 | 显示全部楼层
楼上的发问前搜索一下论坛会有收获

这个问题以前就讨论过了

出0入0汤圆

发表于 2010-5-24 13:58:37 | 显示全部楼层
楼上的发问前搜索一下论坛会有收获
这个问题以前就讨论过了

有结果吗,没搜到啊,给个链接,兄弟,
谢谢了

出0入0汤圆

发表于 2010-8-12 14:49:05 | 显示全部楼层
回复【5楼】ralfak  
楼上的发问前搜索一下论坛会有收获
这个问题以前就讨论过了
-----------------------------------------------------------------------

其实老兄应该把自己的回复合成一个集子,就像北大或者什么的学校bbs系统做的那样,的确老兄在dbgu方面发过很多帖子,但都零零碎碎的
,估计世界上只有google才找的到吧~  这不google又把我飞这儿来了。但就想不起来前天看的是哪篇了,md

出0入0汤圆

发表于 2010-8-12 14:52:36 | 显示全部楼层
回复【7楼】reloaded  电子浪人
回复【5楼】ralfak  
楼上的发问前搜索一下论坛会有收获
这个问题以前就讨论过了
-----------------------------------------------------------------------
其实老兄应该把自己的回复合成一个集子,就像北大或者什么的学校bbs系统做的那样,的确老兄在dbgu方面发过很多帖子,但都零零碎碎的
,估计世界上只有google才找的到吧~  这不google又把我飞这儿来了。但就想不起来前天看的是哪篇了,md
-----------------------------------------------------------------------

这要求提得就过了

既然自己曾经看见过,那么自己找个地方分门别类存一下才是正解,怎么还要求作者出合集啊?给编辑费么?

出0入0汤圆

发表于 2010-8-12 15:20:00 | 显示全部楼层
回复【8楼】waitingconfirm  
回复【7楼】reloaded  电子浪人
回复【5楼】ralfak  
楼上的发问前搜索一下论坛会有收获
这个问题以前就讨论过了
-----------------------------------------------------------------------
其实老兄应该把自己的回复合成一个集子,就像北大或者什么的学校bbs系统做的那样,的确老兄在dbgu方面发过很多帖子,但都零零碎碎的
,估计世界上只有google才找的到吧~  这不google又把我飞这儿来了。但就想不起来前天看的是哪篇了,md
-----------------------------------------------------------------------
这要求提得就过了
既然自己曾经看见过,那么自己找个地方分门别类存一下才是正解,怎么还要求作者出合集啊?给编辑费么?

-----------------------------------------------------------------------
当然您要是觉得过那就过呗,,,
换句话说可以反过头来考量自己做这个小程序除错的心得嘛。。。
我敢说楼上肯定没留意过传统的大学内网bbs,类似于北大未名之类,它的bbs管理员会定期将有意义的讨论贴合成一个贴,然后大家
在它基础上继续发酵。
其实这个功能是可以通过改进论坛内部搜索系统来实现,就是 “关键字 +某人回帖记录”(@google)
其实我想说,论坛真应该把代码阅读器嵌入进来,从notepad里考出来的源代码看着真痛苦。

出0入0汤圆

发表于 2010-8-12 15:27:41 | 显示全部楼层
回复【9楼】reloaded  电子浪人
回复【8楼】waitingconfirm  
当然您要是觉得过那就过呗,,,
换句话说可以反过头来考量自己做这个小程序除错的心得嘛。。。
我敢说楼上肯定没留意过传统的大学内网bbs,类似于北大未名之类,它的bbs管理员会定期将有意义的讨论贴合成一个贴,然后大家
在它基础上继续发酵。
其实这个功能是可以通过改进论坛内部搜索系统来实现,就是 “关键字 +某人回帖记录”(@google)
其实我想说,论坛真应该把代码阅读器嵌入进来,从notepad里考出来的源代码看着真痛苦。

-----------------------------------------------------------------------

多说不如多做

大学内网BBS的管理员十个里面有九个是闲人,还有一个是懒人,当然有工夫不断改进这改进那

但就以这个论坛而言,访问速度和安全性才是首要考虑的因素,代码阅读器什么的……你不会拷下去自己走 indent 啊?

当然,个人也比较支持在论坛后台程序上加个 code 标签一类的,然后标签内容直接后台走完 indent 再放出来……

出0入0汤圆

发表于 2010-8-12 15:43:57 | 显示全部楼层
回复【10楼】waitingconfirm  
-----------------------------------------------------------------------

是的呢,话说indent原来是 缩进 的意思啊~~
他喵的以后我开个source insight 在旁边侯着,,
正在努力提高快速阅读代码的水平中,,,,
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 10:12

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

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