stack frame too large
|
||||
---|---|---|---|---|
中級會員
|
我把我以前在silicon 的 code port 到 MC 來, 但 flash 讀一個 page 至少要 256 byte. 所以我遇到了這個錯誤訊息
請問要何解? Error [1300] stack frame too large unsigned char buf[256]; // Flash_Init(); Flash_Read_Page(0,buf); 我用的是PIC18F6XJ5X, 1 個 bank 是 0x100 bytes
發表於: 2008/12/2 18:53
|
|||
|
Re: PLL enable 後 UART 就有問題了
|
||||
---|---|---|---|---|
中級會員
|
<1>
void Open1USART( unsigned char config, unsigned int spbrg); spbrg 是 unsinged int 超過 256 不會有問題 <2> DataSheet 是這樣寫的 BRGH: High Baud Rate Select bit Asynchronous mode: 1 = High speed 0 = Low speed 但它並沒有定義何謂 High Speed?何謂 Low? <3> 我一樣是設 high speed, 但頻率調降/除頻 #pragma config CPUDIV = OSC2_PLL2 // OSC2 = [CPU System clock/2] baudrate 一樣是9600, 但問題就解決了
發表於: 2008/12/2 18:49
|
|||
|
Re: PLL enable 後 UART 就有問題了
|
||||
---|---|---|---|---|
中級會員
|
不, 很抱歉, 可能我沒寫清楚, 如同我寫的, 我 48 也試過了
>我的外部是 12MHz, 我試過48, 8, 6, ....等頻率. 皆無法運作 > #define F_OSC 48000000
發表於: 2008/12/1 16:22
|
|||
|
PLL enable 後 UART 就有問題了
|
||||
---|---|---|---|---|
中級會員
|
各位好
我使用的chip是PIC18F87J50. 剛開始我使用以下的 code, 我的 uart 是可以正常運作的 #define F_OSC 12000000 #define BAUDRATE 9600 #define BRGVAL (F_OSC/16/(BAUDRATE + 1)) TRISCbits.TRISC7 = 1; TRISCbits.TRISC6 = 0; Open1USART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, BRGVAL); while (1) { if (DataRdy1USART()) { c = Read1USART(); if (c == '\r') break; } } 可是當我 enable PLL, 我的 uart 就收不到資料或者是亂碼,是為什麼呢? 這時的頻率該怎麼算呢? 我的外部是 12MHz, 我試過48, 8, 6, ....等頻率. 皆無法運作 #pragma config PLLDIV = 3 // (12 MHz crystal used on this board) #pragma config CPUDIV = OSC1 // OSC1 = divide by 1 mode #pragma config FOSC = HSPLL // Firmware must also set OSCTUNE<PLLEN> to start PLL! #define F_OSC 12000000 #define BAUDRATE 9600 #define BRGVAL (F_OSC/16/(BAUDRATE + 1)) main() { ... ... unsigned int pll_startup_counter = 600; [color=#ff0000]OSCTUNEbits.PLLEN = 1; [/color]//Enable the PLL and wait 2+ms until the PLL locks before enabling USB module while(pll_startup_counter--); TRISCbits.TRISC7 = 1; TRISCbits.TRISC6 = 0; Open1USART( USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE & USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, BRGVAL); while (1) { if (DataRdy1USART()) { c = Read1USART(); if (c == '\r') break; } } }//end main
發表於: 2008/12/1 15:05
|
|||
|