作者kikiqqp (喵食罐头)
看板ASM
标题Re: [问题] 有关於MCU去改某颗IC暂存器之值
时间Wed Jul 17 11:09:54 2013
举例 有一颗使用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传送资料的副程式又是另一个问
: 题了...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.241.50
※ 编辑: kikiqqp 来自: 220.135.241.50 (07/17 11:14)
1F:推 Acekirisame:正在吸收! 感谢回覆! 07/17 11:26
2F:→ Acekirisame:不好意思 请问BSF这个函式还有一些SPI的函式是 07/17 16:24
3F:→ Acekirisame:.h档里面的东西吗? 这样是不是各家的library的用法 07/17 16:25
4F:→ Acekirisame:都不一样呢? 07/17 16:25
5F:→ kikiqqp:把某一位元设为1 07/17 17:30
6F:→ kikiqqp:看图应该猜的出来BSF在做啥吧 = = 07/17 17:31
7F:推 Acekirisame:有看懂,就是把原本define的数字左移四位 再把RW跟CNCR 07/18 00:26
8F:→ Acekirisame:的判断式给写入变成SPI COMMAND 8BITS格式输出 07/18 00:27
9F:推 ruemann:SPI只是传输的方法 里面的资料格式由各家厂商定义 07/18 00:47
10F:→ ruemann:看厂商高兴怎麽订就怎麽订 07/18 00:47
11F:推 Acekirisame:好 正在study,最近问了不少问题,有点拨云见日的感觉 07/19 16:08