會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





請問有PPS功能型號用MCC產生的碼為何USART都有問題呢?
初級會員
註冊日期:
2008/10/17 14:04
所屬群組:
註冊會員
文章: 33
等級: 4; EXP: 50
HP : 0 / 87
MP : 11 / 2179
離線
最近有空開始在學MCC。。。覺得MCC是用JAVA寫的有點悲劇,
只有一個慢可以形容,打開MCC後,就只能等等等。。。
我的CPU是I7,16GB RAM還是慢到不行
切換專案,整個系統就挺頓好久沒法操控,
記得MCC V3.16還沒這麼嚴重,升上V3.25就讓人受不了!

不好意思,上面是一些廢話,我碰到的問題是
型號K40結尾的,把TX規畫在可以規畫的其中一隻腳,printf都不會輸出(已勾選Redirect Stdio to USART )

我試過用MCC 設計在沒有PPS功能的MCU,如18F45K22,16F1619,用printf 在TX腳就正常輸出

不知是缺少甚麼設定?

我把MCC V3.25產生的CODE貼出來,可以麻煩請大家看看問題在哪裡嗎? 謝謝大家!


void PIN_MANAGER_Initialize
(void)
{
    
/**
    LATx registers
    */   
    
LATA = 0x00;    
    
LATB = 0x00;    
    
LATC = 0x00;    

    
/**
    TRISx registers
    */    
    
TRISA = 0xFE;
    
TRISB = 0xFF;
    
TRISC = 0xBF;

    
/**
    ANSELx registers
    */   
    
ANSELC = 0x3F;
    
ANSELB = 0xFF;
    
ANSELA = 0xFC;

    
/**
    WPUx registers
    */
    
WPUE = 0x08;
    
WPUB = 0xFF;
    
WPUA = 0xFC;
    
WPUC = 0x3F;

    
/**
    ODx registers
    */   
    
ODCONA = 0x00;
    
ODCONB = 0x00;
    
ODCONC = 0x00;
    
    
bool state = GIE;
    
GIE = 0;
    
PPSLOCK = 0x55;
    
PPSLOCK = 0xAA;
    
PPSLOCKbits.PPSLOCKED = 0x00; // unlock PPS

    
RC6PPS = 0x09;   //RC6->EUSART:TX;
    
RXPPSbits.RXPPS = 0x17;   //RC7->EUSART:RX;

    
PPSLOCK = 0x55;
    
PPSLOCK = 0xAA;
    
PPSLOCKbits.PPSLOCKED = 0x01; // lock PPS

    
GIE = state;
}



void EUSART_Initialize
(void)
{
    
// Set the EUSART module to the options selected in the user interface.

    // ABDOVF no_overflow; SCKP Non-Inverted; BRG16 16bit_generator; WUE disabled; ABDEN disabled;
    
BAUD1CON = 0x08;

    
// SPEN enabled; RX9 8-bit; CREN enabled; ADDEN disabled; SREN disabled;
    
RC1STA = 0x90;

    
// TX9 8-bit; TX9D 0; SENDB sync_break_complete; TXEN enabled; SYNC asynchronous; BRGH hi_speed; CSRC slave;
    
TX1STA = 0x24;

    
// Baud Rate = 9600; SP1BRGL 103;
    
SP1BRGL = 0x67;

    
// Baud Rate = 9600; SP1BRGH 0;
    
SP1BRGH = 0x00;

}

附加檔案:



jpg  PIC18F25K40.jpg (32.22 KB)
5102_5825d894a9955.jpg 377X376 px

2016/11/11 22:41
轉換PDF檔 列印


Re: 請問有PPS功能型號用MCC產生的碼為何USART都有問題呢?
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1516
等級: 33; EXP: 17
HP : 160 / 804
MP : 505 / 16031
離線
沒記錯的話, printf 不支援中斷模式, 您有開啟UART的中斷嗎?

2016/11/12 03:18
轉換PDF檔 列印


Re: 請問有PPS功能型號用MCC產生的碼為何USART都有問題呢?
初級會員
註冊日期:
2008/10/17 14:04
所屬群組:
註冊會員
文章: 33
等級: 4; EXP: 50
HP : 0 / 87
MP : 11 / 2179
離線
引用:

AdamSyu 寫道:
沒記錯的話, printf 不支援中斷模式, 您有開啟UART的中斷嗎?


謝謝您這麼晚(早)回覆。。。感動。。。。

不知是否是bug????,我沒有使用中斷

我如果直接呼叫putch();就可以輸出到TX PIN了,找了好久,找出問題所在!

原來是printf()不會去呼叫putch,導致TX無輸出!
如果在MCC的ESUART 的Redirect Stdio to USART 有勾選的話
會在eusart.c內產生兩個函數,
而這個個函數是屬於Global,不需要在eusart.h宣告
正常的話printf()如果putch()存在,就會去呼叫它;
我設斷點,同樣方法MCC產生的碼在18F45K22和16F1619 Device上, printf()就會去呼叫putch()所以能正常輸出到RS232;
但是18F24K50的printf()就不會去呼叫

暫時知道問題是這樣,但目前還不知如何解決讓printf()去呼叫putch()!!!!


char getch
(void)
{
    return
EUSART_Read();
}

void putch(char txData)
{
    
EUSART_Write(txData);
}

2016/11/12 04:03
轉換PDF檔 列印


Re: 請問有PPS功能型號用MCC產生的碼為何USART都有問題呢?
初級會員
註冊日期:
2008/10/17 14:04
所屬群組:
註冊會員
文章: 33
等級: 4; EXP: 50
HP : 0 / 87
MP : 11 / 2179
離線
發現一些眉目了
我的程式是printf("hello\r\n");
單步會進入doprnt.c,因為原始doprnt.c的寫法有點怪也不利單步觀察
我把原來
while(c=*f++){
改成
c=*(f);
f++;
while(c){
================
從圖片可以看到
f的記憶體位置是0x0801,內容值是0x48,ASCII='h',也就是字串hello的開始'h',
當執行完c=*(f);理應c=0x48才對,這樣才會進入while(c)迴圈內呼叫pputc就是putch
執行後c卻變成0,所以整個printf("hello\r\n")根本都沒執行;
我把它Disammbly出來觀察,如圖片
因為是用查表法指令,到底為何讀出來是0????
請有經驗的先進幫忙查看一下這段Assembly有什麼問題嗎? 謝謝!

附加檔案:



jpg  bug-1.jpg (120.46 KB)
5102_5826a9da38c91.jpg 584X564 px

jpg  bug-2.jpg (116.48 KB)
5102_5826a9e3d2789.jpg 513X531 px

jpg  bug-3.jpg (159.50 KB)
5102_5826a9ecc37e7.jpg 505X757 px

2016/11/12 13:35
轉換PDF檔 列印


Re: 請問有PPS功能型號用MCC產生的碼為何USART都有問題呢?
高級會員
註冊日期:
2008/11/13 13:41
所屬群組:
註冊會員
文章: 149
等級: 11; EXP: 26
HP : 0 / 256
MP : 49 / 6332
離線
MPLAB_XC8_C_Compiler_User_Guide.pdf 裡提到


void putch(char data) {
while( ! TXIF) // check buffer
continue; // wait till ready
TXREG = data; // send data
}

這是依據putch裡的程式碼判定是往哪邊送,要用哪個就設定哪個uart/eusart的相關旗標與暫存器

2016/11/18 23:15
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088221 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project