音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

AT91SAM7S64串口PDC報"DATA ABORT"故障

作者:mytempid 欄目:ARM技術(shù)
AT91SAM7S64串口PDC報"DATA ABORT"故障

    現(xiàn)在我在應(yīng)用串口1的PDC時發(fā)現(xiàn)串口通訊會造成程序產(chǎn)生"Data abort"故障。
    一般通訊1分鐘內(nèi)就會出現(xiàn)一次"Data abort"故障。
    由于初次使用,目前尚未查出問題。請兩位幫忙看看代碼有無疏漏。
    謝謝!
    代碼如下:

// 中斷服務(wù)部分
void serial1_handler(void)
{
    unsigned int status;
    unsigned SHORT txd_len;
    AT91S_PDC *pUSART1_PDC = (AT91S_PDC *)&(pUSART1->US_RPR);

    // get Usart status register
    status = pUSART1->US_CSR;

    if ( status & AT91C_US_ENDTX)
    {
        // 發(fā)送結(jié)束,使能接收
        // Clear ENDTX flag, PDC_TCR寫大于1的值能清除ENDTX標(biāo)志
        pUSART1_PDC->PDC_PTCR = AT91C_PDC_TXTDIS;     
        pUSART1_PDC->PDC_TCR = 2;                        
        // Open UART1 PDC-RX,各寄存器賦值
        pUSART1->US_CR = AT91C_US_STTTO;    // Start Time-out
        pUSART1_PDC->PDC_PTCR = AT91C_PDC_RXTDIS;// Disable PDC-Rx
        pUSART1_PDC->PDC_RPR = (unsigned int)uart1_RxBuff;          
        pUSART1_PDC->PDC_RCR = USART1_RxBuf_LEN;
        pUSART1_PDC->PDC_RNPR = 0;            
        pUSART1_PDC->PDC_RNCR = 0;            
        pUSART1_PDC->PDC_PTCR = AT91C_PDC_RXTEN;// Enable PDC-Rx

    }

    if ( status & AT91C_US_TIMEOUT)
    {    
        // 關(guān)閉接收
        pUSART1->US_PTCR = AT91C_PDC_RXTDIS;        

        // 處理數(shù)據(jù)
        txd_len = ModbusPrs();

        if (txd_len >= MD_MIN_TX_LEN)
        {
            pUSART1_PDC->PDC_TPR = (unsigned int) uart1_TxBuff;
            pUSART1_PDC->PDC_TCR = txd_len;
            pUSART1_PDC->PDC_RNPR = 0;            
            pUSART1_PDC->PDC_RNCR = 0;            
            pUSART1_PDC->PDC_PTCR = AT91C_PDC_TXTEN;// Enable PDC-Tx
        }
        else
        {
            // Open UART1 PDC-RX
            pUSART1->US_CR = AT91C_US_STTTO;    // Start Time-out
            pUSART1_PDC->PDC_PTCR = AT91C_PDC_RXTDIS;
            pUSART1_PDC->PDC_RPR = (unsigned int)uart1_RxBuff;
            pUSART1_PDC->PDC_RCR = USART1_RxBuf_LEN;
            pUSART1_PDC->PDC_RNPR = 0;        
            pUSART1_PDC->PDC_RNCR = 0;                   // Receive Next Counter Register
               pUSART1->US_PTCR = AT91C_PDC_RXTEN;
        }
    }    
    
    pUSART1->US_CR = AT91C_US_STTTO |      // Start Time-out
                    AT91C_US_RSTSTA;          // Reset the status bit

}

// USART1初始化部分
//==================================================================
void init_serial1 (void)                                // Initialize Serial Interface
{
    AT91S_AIC *pAIC = AT91C_BASE_AIC;
    AT91S_PDC *pUSART1_PDC = (AT91S_PDC *)&(pUSART1->US_RPR;   
   *AT91C_PIOA_PDR = AT91C_PA21_RXD1 |                // Enable RxD1 Pin
                                        AT91C_PA22_TXD1 |                 // Enalbe TxD1 Pin
                                        AT91C_PA24_RTS1;                 // Enalbe RTS1 Pin

    pUSART1->US_CR = AT91C_US_RSTRX |                  // Reset RECEIVER
                    AT91C_US_RSTTX |                  // Reset Transmitter
                    AT91C_US_RXDIS |                 // RECEIVER Disable
                     AT91C_US_TXDIS;                  // Transmitter
參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
有關(guān)AT91SAM7S64的中斷嵌套啟動文件的問題
哪位大俠知道油田測量系統(tǒng)的0-1500V,0-250A該如何測量?
有關(guān)nandflash/K9F1G08U0A的問題
往有數(shù)據(jù)的flash地址寫數(shù)據(jù)
現(xiàn)在搞44B0的朋友還多嗎?
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號