線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2546
推到 Plurk!
推到 Facebook!

請問有關MCU接收GPIO腳位的資料讀取的寫法??

缺席
Tommy0325
一般會員


發表:5
回覆:4
積分:1
註冊:2007-05-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-07-14 02:39:06 IP:140.126.xxx.xxx 訂閱
我有個問題困擾我很久,在此提出來看看是否有高手給我意見指導一下!!

內容有比較長,希望有緣人可以耐心看完,並且思考一下小弟的問題...

(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 CLOCK 0x00020000 //P2.17
#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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-07-14 18:54:38 IP:61.225.xxx.xxx 未訂閱
> 功能:用控制器接收RF電路的訊號時,無法正確將準位判斷出來!!
要做出這樣的功用。應該不會太難才對。
Tommy0325
一般會員


發表:5
回覆:4
積分:1
註冊:2007-05-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-07-16 15:35:54 IP:140.126.xxx.xxx 訂閱
也對啦...應該不太難..但是我遇到問題了..想過了..沒辦法解決..就感到很難..謝謝!!
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-07-16 18:42:55 IP:61.225.xxx.xxx 未訂閱
我是說,要做出一個接收RF電路的訊號,而無法正確將準位判斷出來的”功能”應該不難吧。

===================引 用 暗黑破壞神 文 章===================
> 功能:用控制器接收RF電路的訊號時,無法正確將準位判斷出來!!
要做出這樣的功用。應該不會太難才對。
系統時間:2024-05-11 19:04:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!