請問有關MCU接收GPIO腳位的資料讀取的寫法?? |
缺席
|
Tommy0325
一般會員 發表:5 回覆:4 積分:1 註冊:2007-05-04 發送簡訊給我 |
我有個問題困擾我很久,在此提出來看看是否有高手給我意見指導一下!!
內容有比較長,希望有緣人可以耐心看完,並且思考一下小弟的問題... (1).環境介紹 我使用ARM7當我的控制器,控制一個外部RF電路!!編寫語言使用C 功能:用控制器接收RF電路的訊號時,無法正確將準位判斷出來!! 主要有2根PIN腳給控制器和RF電路在做溝通............二隻PIN腳都為輸入(MCU==輸入,RF電路將訊號傳送給MCU).....一支是CLCOCK腳 // 0x00020000 <--時脈腳 一支是DATA腳// 0x00000080 <--數據輸入腳 (2).所需完成的功能介紹 1-->當RF電路的CLOCK腳為High的時候,接收DATA腳的訊號...............反之當RF電路的CLOCK腳為Low的時候,不做任何動作 2-->當DATA接收8個訊號後為完成1個Byte的資料接收,並且當DATA先接收第一筆訊號時(MSB),應該是處於這一個Byte的最後一筆資料(LSB)...例如:當MCU接收8個訊號是00001010==0A(16進制),應該被控制器的程式以陣列方式表示成01010000==50(16進制)...並且Printf()出來 3-->RF電路有起始時間s2(),響應時間Response()以及結束時間es2().......資料的輸出主要在輸出響應時間Response(),一個響應時間回傳資料的長度,在這些長度裡以8個Bits為一次響應,所以控制器一定要將響應時間Response()全部做完,才會做結束時間es2()....響應時間Response()可能會作好幾次,也就是回傳n個Bytes (3).無法解決的問題 我的RF電路回傳訊號給控制器,由示波器接到控制器的GPIO腳位所量測到的訊號完全正確無誤.....但是我要以程式的方式將控制器接收到的數據以16進制呈現出來..並且存到自己定義的r_buf[i]裡.....我做不出來....我卡了太久了..快瘋掉了.. 我有想到DATA的數據接收可用堆疊去做,因為是First in last out.....但是我沒相關經驗..不知如何下手 我大約放上我自己寫的程式碼,給大大們觀看......請求你們的幫助了.. #include #include"config.h" #include #include #define DATA 0x00000080 //P0.7 int s2(void); int es2(void); void response(void); int main(void) { .... .... .... .... .... while(s2()) { while(!es2()) { Response(); }; }; } //在此IO2PIN指的是CLCOK那一個Port的資料暫存器 //在此IO0PIN指的是DATA那一個Port的資料暫存器 int s2(void) //資料起始時間 { while(!IO2PIN & 0x00020000) //CLOCK==0 { //do nothing }; while(IO2PIN & 0x00020000) //CLOCK==1 { if(IO0PIN & 0x00000080) //當CLOCK==1,DATA腳位上升,並且可以告知開始接收資料 return 1; }; return 0; //沒有偵測到s2() } void response(void) //所要讀取的資料數據,在此指做了1個Byte { int i,bit; for(Re[0]=0x00;Re[0]<=0x00;Re[0] ); Re[0]=0x00; for(i=0;i<8;i ) { while(!IO2PIN & 0x00020000) //CLOCK==0 { //什麼事都不做 }; //當CLOCK上升==1...得到DATA的訊號 bit=IO0PIN &0x00000080; //將DATA數據腳傳送給控制器來檢測準位訊號,是為1還是為0 Re[0]=bit; printf("DATA== %x\t",Re[0]); //將DATA以16進制呈現出來 } int es2(void) //資料結束時間 { int D_Low=1; while(!IO2PIN & 0x00020000) //當CLOCK==0 { if(IO0PIN & 0x00000080) 如果有DATA { D_Low=0; } else { D_Low=1; } }; if(!D_Low) { while(IO2PIN & 0x00020000) { if((IO0PIN & 0x00000080)==0) return 1; }; } |
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
|
Tommy0325
一般會員 發表:5 回覆:4 積分:1 註冊:2007-05-04 發送簡訊給我 |
|
暗黑破壞神
版主 發表:9 回覆:2301 積分:1627 註冊:2004-10-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |