x mbed2リビジョン144
x リビジョンを変更できる人むけ
目的
I2C-USART用のテスト
イメージです。
資料
//soft_i2c_test_812_1
#include "mbed.h"
DigitalInOut SDA1(P0_10, PIN_OUTPUT,OpenDrain,0);
DigitalInOut SCL1(P0_11, PIN_OUTPUT,OpenDrain,0);
//A5
#define SCK_0_HIGH() SCL1=1
#define SCK_0_LOW() SCL1=0
//A4
#define SDA_0_HIGH() SDA1=1
#define SDA_0_LOW() SDA1=0
// 1000us 1kh
// 100us 10kh
// 10us 100kh
#define myDelay() wait_us(100);
int soft_i2c(char add_p, char data_p)
{
int ii; //カウンター
//待ち
SDA_0_HIGH();
SCK_0_HIGH();
myDelay();
myDelay();
myDelay();
//START
SDA_0_LOW();
myDelay();
SCK_0_LOW();
myDelay();
for (ii = 0; ii < 8; ii++) {
SCK_0_LOW();
if ( ((add_p << ii) & 0x80) == 0 ) {
SDA_0_LOW();
} else {
SDA_0_HIGH();
}//endif
myDelay();
SCK_0_HIGH();
myDelay();
}//for
//ack
SCK_0_LOW();
SDA_0_HIGH();
myDelay();
SCK_0_HIGH();
myDelay();
for (ii = 0; ii < 8; ii++) {
SCK_0_LOW();
if ( ((data_p << ii) & 0x80) == 0 ) {
SDA_0_LOW();
} else {
SDA_0_HIGH();
}//endif
myDelay();
SCK_0_HIGH();
myDelay();
}//for
//ack
SCK_0_LOW();
SDA_0_HIGH();
myDelay();
SCK_0_HIGH();
myDelay();
//STOP
SCK_0_LOW();
SDA_0_LOW();
myDelay();
SCK_0_HIGH();
myDelay();
SDA_0_HIGH();
myDelay();
return (0);
}//soft_i2c
//メイン関数
int main()
{
SCL1 = 1;
SDA1 = 1;
//無限ループ
while(1) {
char *ss1 = "hello world\r\n";
int ii=0;
while(ss1[ii] != 0 ){
soft_i2c(0x80, ss1[ii]);ii++;
}//while
wait_ms(1000); //1秒の待ち
}//while
}//main