Single UART with I2C-bus/SPI interface, 64 bytes of transmit and receive FIFOs, IrDA SIR built-in support
Dependencies: mbed
SC16IS750.cpp
- Committer:
- wataaki
- Date:
- 2015-02-04
- Revision:
- 0:e35a417c6590
File content as of revision 0:e35a417c6590:
#include "mbed.h" #include "SC16IS750.h" I2C i2c(p28,p27); // sda, scl Serial pc(USBTX, USBRX); // tx, rx char cmd[128]; char str[128]; char i, j; void set_ch(char sel) { // PCA9541のサンプル // MST_0側の自分にスレーブ側の制御権を得る場合 cmd[0] = 1; // PCA9541 コマンドコード Cont Reg i2c.write( 0xe2, cmd, 1); // Cont Regを指定 i2c.read( 0xe2, cmd, 1); // Cont Regを読込み wait(0.1); // 0.1s待つ switch(cmd[0] & 0xf) { case 0: // bus off, has control case 1: // bus off, no control case 5: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 4; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 2: // bus off, no control case 3: // bus off, has control case 6: // bus on, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 5; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 9: // bus on, no control case 0xc: // bus on, no control case 0xd: // bus off, no control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 0; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; case 0xa: // bus on, no control case 0xe: // bus off, no control case 0xf: // bus on, has control cmd[0] = 1; // PCA9541 コマンドコード Cont Reg cmd[1] = 1; // bus on, has control i2c.write( 0xe2, cmd, 2); // Cont Regにcmd[1]を書込み i2c.read( 0xe2, cmd, 1); // Cont Regを読込み break; default: break; } cmd[0] = sel; // PCA9546 Cont Reg sel channel enabled i2c.write( 0xe8, cmd, 1); // Send command string } int main () { i2c.frequency(100000); pc.printf("\r\nSC16IS750 Sample Program\r\n"); set_ch(1); // SC16IS750はch0に接続 // cmd[0] = LCR << 3; cmd[1] = 0x83; // DLL,H Latch enable i2c.write(SC16IS750_ADDR, cmd, 2); cmd[0] = DLL << 3; cmd[1] = 117; // baud = 18e6 / 16 /117 = 9615 i2c.write(SC16IS750_ADDR, cmd, 2); cmd[0] = DLH << 3; cmd[1] = 0x0; i2c.write(SC16IS750_ADDR, cmd, 2); cmd[0] = LCR << 3; cmd[1] = 0x03; // NoParity 1Stop 8bits i2c.write(SC16IS750_ADDR, cmd, 2); cmd[0] = FCR << 3; cmd[1] = 0x07; // reset TX,RX FIFO, FIFO enable i2c.write(SC16IS750_ADDR, cmd, 2); while(1) { pc.printf("\r\n文字列を入力してください>"); pc.scanf("%s" , str); j = strlen(str); pc.printf("\r\n送信された文字列 = %s %d文字\r\n" , str, j); cmd[0] = THR << 3; for (i = 0; i < j; i++) cmd[i + 1] = str[i]; i2c.write(SC16IS750_ADDR, cmd, j + 1); wait(1); cmd[0] = RHR << 3; // i2c.write(SC16IS750_ADDR, cmd, 1, true); i2c.read(SC16IS750_ADDR, cmd, j); cmd[j] = 0; pc.printf("受信した文字列 = %s\r\n", cmd); } }