Re: [問題] 有關於MCU去改某顆IC暫存器之值

作者: kikiqqp (喵食罐頭)   2013-07-17 11:09:54
舉例 有一顆使用SPI通訊的 ADC
他的命令方式是
http://images.plurk.com/d7li-6YnNNlTPMCq7nnLMgjUdDx.jpg
.h會這樣寫(以下為虛擬碼)
#define READ 1
#define WRITE 0
#define SYS 0 //RW傳8bit
#define ADC 1 //RW傳16bit
#define ADO0 2 //R傳24bit
#define ADO1 4 //R傳24bit
#define TS 6 //R傳16bit
....etc
由這樣可以知道命令為8位元資料
例如下SYS讀取
則只要送出
0b10000000接著送8bit的clock把資料拖回來
那程式我只要寫
if(ADC_COMMAND(READ, SYS, false))
{
8bit讀取放在這
}
就快快樂樂的下好命令等著抓資料了
函式為
bool ADC_COMMAND(const unsigned char RW,
const unsigned char Adds,
bool CNCR)
{
if(Adds >= 0b1000)
return false; //傳輸命令不合法
volatile int Commd = 0;
Commd = Adds << 4;
if(CNCR)
BSF(Commd, 3);
if(RW)
BSF(Commd, 7);
ADC_CSLOW();
SPI_TxBuffer = Commd; //送出
while(GETBIT(SPI_SET1, SPI_TxBF)); //等待送出完成
ADC_CSHIGH();
return true;
}
※ 引述《Acekirisame (達陸趁現在!)》之銘言:
: 如前題,這段時間在忙其他工作,尚未對MCU CODING
: 但是這段時間還是有陸續問有在接觸MCU的同學問問題,
: 也感謝之前K版友的詳細回覆,現在我目前想確認之前的
: 一些問題,如下網址裡面的圖,這是MCU欲控制的IC,這是
: 該IC裡面的一些暫存器(有包含位址跟讀寫,後面的SPEC
: 還有說明各BIT的作用)
: http://i.imgur.com/2iH0YFZ.jpg
: 寫C++時,我參考K版友的參考CODE後我定義了上述暫存器:
: #define SYSTEM (*(unsigned int *)0x01)
: #define SYSTEM_OPER (*(unsigned int *)0x02)
: #define EXTERNAL_MOS (*(unsigned int *)0x03)
: #define WAKE_UP_SOURCE_DFM_SET (*(unsigned int *)0x04)
: #define DFMONITOR (*(unsigned int *)0x05)
: #define WATCHDOG_CONF (*(unsigned int *)0x06)
: #define RESERVED_W (*(unsigned int *)0x07)
: #define LINBITS_SET (*(unsigned int *)0x08)
: #define DRV_SET (*(unsigned int *)0x09)
: #define RESRVED (*(unsigned int *)0x0A)
: #define TEST_STAT (*(unsigned int *)0x0B)
: #define WATCHDOG_REFRESH (*(unsigned int *)0x0F)
: #define WAKE_UP_SOURCE (*(unsigned int *)0x11)
: #define LAMP_STAT (*(unsigned int *)0x12)
: #define PH_SENSE (*(unsigned int *)0x13)
: #define WD_TS_RES_CNT (*(unsigned int *)0x14)
: #define DEVICE_INFO (*(unsigned int *)0x1F)
: 不知道這樣定義後對不對,假使是對的話,我就會開始用他們的
: 內建的SPI INTERFACE去讀寫該顆IC的暫存器的值,
: 不過要了解他們的library的SPI傳送資料的副程式又是另一個問
: 題了...
作者: Acekirisame (達陸趁現在!)   2013-07-17 11:26:00
正在吸收! 感謝回覆!不好意思 請問BSF這個函式還有一些SPI的函式是.h檔裡面的東西嗎? 這樣是不是各家的library的用法都不一樣呢?
作者: kikiqqp (喵食罐頭)   2013-07-17 17:30:00
把某一位元設為1看圖應該猜的出來BSF在做啥吧 = =
作者: Acekirisame (達陸趁現在!)   2013-07-18 00:26:00
有看懂,就是把原本define的數字左移四位 再把RW跟CNCR的判斷式給寫入變成SPI COMMAND 8BITS格式輸出
作者: ruemann (路人甲)   2013-07-18 00:47:00
SPI只是傳輸的方法 裡面的資料格式由各家廠商定義看廠商高興怎麼訂就怎麼訂
作者: Acekirisame (達陸趁現在!)   2013-07-19 16:08:00
好 正在study,最近問了不少問題,有點撥雲見日的感覺

Links booklink

Contact Us: admin [ a t ] ucptt.com