用s5pc100的GPIO模擬IIC

2022-05-02 09:57:10 字數 1893 閱讀 9991

**:

先來看看lm75硬體的上的連線:

其中i2c_sda0是資料線,i2c_scl0是時鐘線,它們分別接到s5pc100的gpd3和gpd4,如下圖所示

在模擬iic的時候,用gpd3引腳傳送資料或讀取資料,用gpd4引腳提供時鐘訊號即可。

由於s5pc100的gpd這一組的引腳很多,不好單獨對其中的某乙個引腳操作,為了能單獨對其中的某乙個管腳單獨操作,這裡使用了c語言的位域。

typedef struct

gpddat_t;

#define gpd_dat (* (volatile gpddat_t *)0xe0300084)

#define sda gpd_dat.gpddat_3

#define scl gpd_dat.gpddat_4

scl 為高電平時,sda由高電平向低電平跳變,開始傳送資料

/*

iic start:scl = 1,sda = 1->0

*/void

iic_start()

scl為高電平時,sda由低電平向高電平跳變,結束傳送資料

/*

iic stop:scl = 1,sda = 0->1

*/void

iic_stop()

/*

write 1 byte to iic

*/void

iic_write_byte(uint8 data)

return

; }

/*

read 1 byte from iic

*/uint8 iic_read_byte()

return

value;

}

void

iic_send_ack()

uint8 iic_get_ack() 

通過iic讀取lm75測量溫度值的時序如下:

例項**如下:

unsigned int

__read_lm75()

while

(ack);

//讀取從機傳送過來的資料

high =iic_read_byte();

//設定iic連線的pin(sda)為輸出模式

set_gpio_mode(gpd.gpdcon,3,1

);

//傳送ack訊號

iic_send_ack();

//設定iic連線的pin(sda)為輸入模式

set_gpio_mode(gpd.gpdcon,3,0

);

//讀取從機傳送過來的資料

low =iic_read_byte();

//設定iic連線的pin(sda)為輸出模式

set_gpio_mode(gpd.gpdcon,3,1

);

//傳送停止訊號

iic_stop();

return (high << 8) |low;

}

實驗的經驗:

1.讀不到從機傳送的ack訊號,原因是沒有將sda的那根線設為輸入模式

2.在做的過程中,一開始每次讀取的時候溫度的值一直沒有改變,後來發現是由於每次沒有傳送停止訊號產生的。 

完。

S5PC100看門狗定時器

看門狗定時器 wdt,watch dog timer 是微控制器的乙個組成部分,在微控制器程式的除錯和執行中都有著重要的意義。它的主要功能是在發生軟體故障時,通過使器件復位 如果軟體未將器件清零 將微控制器復位。也可以用於將器件從休眠或空閒模式喚醒。看門狗 watchdog 定時器和pwm定時功能目...

s5pc100開發板linux核心移植

應用於fsc100開發板 交叉編譯工具 arm cortex a8 linux gnueabi gcc linux 2.6.35.tar.bz2 將linux 2.6.35.tar.bz2拷貝到 home linux下並解壓 tar xvf linux 2.6.35.tar.bz2 cd linux...

S5pc100裸板全攻略之SPI

華清遠見嵌入式培訓中心 講師。include s5pc100.h include s5pc100.h include uart.h define spi0 clk gate on 1 6 define max 50 flash opcodes.define opcode wren 0x06 writ...