一個硬體UART跟軟體UART共存使用的問題
|
||||
---|---|---|---|---|
高級會員
|
一個硬體UART跟軟體UART共存使用的問題
我用CCS所提供的 #USE RS232 來擴充多個 RS232 自己實體的RS232、TX-C6、RX-C7也有用含下面共三組 #USE RS232(BAUD=4800, XMIT=PIN_B0, RCV=PIN_B1, STREAM=COM_A) #USE RS232(BAUD=4800, XMIT=PIN_B2, RCV=PIN_B3, STREAM=COM_B) 我想問的問題是 ~ Q1:當軟體模擬的 #USE RS232在收資料時,若是硬體上自己的RS-232 有資料進來的話,是不是硬體中斷的RS-232 會直接搶走正在收送 資料的 #USE RS232? Q2:CCS的 #USE RS232 這個函數,它的內部是怎樣運作的?我指的是 他是去拿硬體架構上的UART暫存器來使用嗎 ? 如果是的話….這樣擴充RS232的方式,只能一次運行一組對吧 ? Q3:#USE RS232 這種方式是不是沒辦法有自己的中斷? 如果可以有?也是無法抵觸硬體架構的 UART 中斷對不對? 硬體中斷是 #INT_RDA void RDA_isr() { … } 目前我試過三組只能獨立運作,若是模擬的RS232 正在執行中 而硬體有要動作的話,硬體會拿走去執行,接著就當掉了 XD PS:撇開上面的方式不談,有沒有什麼IC一次可以提供四組UART 的?畢竟用模擬的方式問題會很多 ~ 硬體開發上相對也很不容易
發表於: 2009/2/9 10:48
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
圖檔送上~
有問題的應該是在 EEPROM 的 SDO 送往 PIC 的 SDI(RC4) PIC 的 SDO 送給 EEPROM 的 SDI 波形是正確的 ~ 但是 讀出來好像不行讀 ~~ 波形很奇怪 !! 我圖片都有中文說明 Attach file: Link only for registered users
發表於: 2009/1/14 12:11
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
請問這邊能貼圖嘛 ?
其實我已經在用示波器來看了,我想貼上來給大家看一下
發表於: 2009/1/14 11:48
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
目前程式是改成這樣...
APP001實驗板上 DIP 開關是把相關腳位給 ON 而已 用終端機看印出狀態是空空沒有東西 用示波器看CS腳是有明顯 LH動作 但是在 LH這中間 CLK 腳只有突波...沒有明顯的"數據CLK" 還是無法動作....冏 ------------------------------------------------------------------ output_low(pin_a5); //CS給LOW { SPI_write(0x06); //寫入致能 SPI_write(0x02); //發送操作碼 spi_write(0x00); //送high_address spi_write(0x10); //送low_address spi_write(0x65); //送出數據 A output_high(pin_a5); //CS給HIGH } output_low(pin_a5); //CS給LOW { SPI_write(0x03); spi_write(0x00); //送high_address spi_write(0x10); //送low_address SPI_Msg = spi_read(); output_high(pin_a5); //CS給HIGH } printf("%c",SPI_Msg); delay_ms(200);
發表於: 2009/1/13 11:02
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
我看了一下 datasheet 的波形圖
寫的部份 : 0x02 //是寫入操作碼 0x00 //給high_address 0x10 //給low_address data //接著寫入資料 SO ~~ 我這樣寫 : spi_write(0x02); spi_write(0x00); spi_write(0x10); spi_write(0xA5); -------------------------------------------------- 讀取的部份 : spi_write(0x03); spi_write(0x00); spi_write(0x10); Val = spi_read(); -------------------------------------------------- printf("%c",Val); // 沒有東西出來 Orz
發表於: 2009/1/12 17:07
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
嗯 ~ 請教一下 address 要怎麼給呀 ?
spi_write(HIGH_address); //可否解釋一下這個 spi_write(low_address); //可否解釋一下這個 --------------------------------------------------- PIC 寫到 eeprom spi_write(0x02); //這是寫的時候先下 0x02嘛 ? spi_write(data); //接著寫入資料 --------------------------------------------------- PIC 讀取 eeprom spi_write(0x03); //這是寫的時候先下 0x03嘛 ? var = spi_read(); //接著從 eeprom 讀取資料 ? --------------------------------------------------- 是這樣的嘛 ? 不是很懂怎麼用 @_@
發表於: 2009/1/12 16:53
|
|||
|
Re: 請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
試了一個多禮拜 ~ 我4620的SPI還是無法正常工作 ...
目前狀態是 我以 PIC 做 MASTER,由 PIC 來提供 SCK 的 CLK 給 外部的 EEPROM (25LC160A),如此我不用去管 CS 腳 ! 那麼 ~ spi_write('A'); <--- 對CCS而言這應該就會自動寫一個 A 給 EEPROM 吧 ? 我用示波器看 CLK 連坑都不吭一聲的 0.0 目前片段 code 如下 #int_SSP void SSP_isr(void) { spi_write('a'); //寫一個a過去 delay_ms(1); SPI_Msg = spi_read(); // 讀回來放在Temp delay_ms(1); printf("%c",SPI_Temp); 印出來 } } //---------------------------------------------------- void main() { enable_interrupts (INT_SSP); setup_spi(spi_master |spi_l_to_h | spi_clk_div_4 ); for(;;){ SSP_isr(); } } 希望高手能指導一下...快冏爆了 Orz ...
發表於: 2009/1/12 10:43
|
|||
|
請教 --> 關於 SPI EEPROM 如何存取使用 by CCS
|
||||
---|---|---|---|---|
高級會員
|
開發板 --> APP001 REV2.0
(看板子說明書已將 J9 都用 jump 連接,J10 斷開,如此是使用 25LC160A這顆 EEPROM) 如果沒錯的話腳位應該是(指開發板上) RC3 --> SCK --> colck RC4 --> SDI --> input RC5 --> SDO --> output 1. 我看了CCS裡附帶的 index 範例 2. 參考了C18的函數範例 3. 25LC160A的PDF也看過了 試著想要存取看看外部 EEPROM 只是試不出來 ~"~ 希望板上有能者可以給予指導一下 ~ 我是設定了如下的 code #int_SSP void SSP_isr(void) { spi_write('A'); //寫一個A過去 SPI_Temp = spi_read(0); // 讀回來 { printf("%c",SPI_Temp); 印出來 } } //---------------------------------------------------- void main() { enable_interrupts (INT_SSP); setup_spi(spi_master |spi_l_to_h | spi_clk_div_4 ); setup_spi(FALSE); } 我是用終端機看的,測試的設備不多,還是説開發過程中可以用哪些技巧來檢測也希望大大能指導一下,目前都只能用終端機在看對不對 ~ 有圖有真相嘛 最後請有玩過的大仔能幫個忙...讓它動起來了
發表於: 2008/12/25 15:25
Edited by sindyvirgo on 2008年12月25日 15:41:34
|
|||
|
CCS #int_RDA 中斷觀念問題
|
||||
---|---|---|---|---|
高級會員
|
之前有發過一篇UART的接收問題
http://www.microchip.com.tw/modules/n ... php?topic_id=6150&forum=1 對於CCS的中斷我有點模糊了 ~ 希望有寫CCS的大大指點我一下 ~ #int_RDA 這個應該是中斷接收語法 下面片段 #int_RDA void RDA_isr() { for(i=0 ; i<512 ; i++) { Msg_Array[i] = getc(); //接收字元一個個放進陣列 Ram_Array[i] = Msg_Array[i]; //複製到另一個陣列 } { for(i=0 ; i<512 ; i++) printf("%c",Ram_Array[i]); //印出來 Msg_Array[i] = ‘ ‘; //清空 } } void main() { enable_interrupts(INT_RDA); enable_interrupts(INT_TBE); enable_interrupts(GLOBAL); 主程式裡目前沒有東西 ~ } --------------------------------------------------------------------------------- #int_RDA 問過幾個大仔,這個就是接收中斷,CCS會自己產生 就因為如此所以我模糊了,我覺得是我不知道該把程式片段給設定 在哪邊的問題 ~ 1. 我有把印出的程式片斷丟在主程式裡面,但那樣做沒有反應 ~ 2. 我又試著把印出片段放在 #int_RDA(如我貼的) 裡面,可以印 出,但是只能印一次,這應該就是nicecookie大仔說的,TX時 我沒有把RX停掉導致 主要也是問這問題,CCS裡面我要停 RX怎麼停 !? 因為有人說CCS會自己產生,所以腦袋打結 …
發表於: 2008/12/22 10:35
|
|||
|