2 * \file i2c_subsystem.c
5 * \author Takemasa Nakamura
7 #include "i2c_subsystem.h"
18 LPC_SC->PCONP |= 1 << 7;
19 /* I2C0のPCLKを 1/4 にセット (25MHz) */
20 LPC_SC->PCLKSEL0 &= ~(0x3 << 14);
22 /* P0.27, P0.28を SCL0, SDA0に */
23 LPC_PINCON->PINSEL1 &= ~(0xF << 22);
24 LPC_PINCON->PINSEL1 |= 0x5 << 22;
26 /* I2C動作クロック 100KHz (コアクロック100MHzのとき) */
27 LPC_I2C0->I2SCLH = 1250;
28 LPC_I2C0->I2SCLL = 1250;
31 LPC_I2C0->I2CONCLR = 0xFF;
34 void i2c_send_2bytes(int addr, int data0, int data1)
37 LPC_I2C0->I2CONSET = 0x40;
39 LPC_I2C0->I2CONSET = 0x20;
41 if (LPC_I2C0->I2STAT != 0x08) {
43 syslog(LOG_NOTICE, "I2C0 Start. Expects 0x08 ");
44 syslog(LOG_NOTICE, "I2CONSET0 %02x", LPC_I2C0->I2CONSET);
45 syslog(LOG_NOTICE, "I2STAT0 %02x", LPC_I2C0->I2STAT);
49 /* I2C アドレス TLV320AIC23B CS=0, Write */
50 LPC_I2C0->I2DAT = addr << 1;
53 LPC_I2C0->I2CONCLR = 0x28;
55 if (LPC_I2C0->I2STAT != 0x18) {
57 syslog(LOG_NOTICE, "SI&STA Clear, SLA + W sent. Expects 0x18 ");
58 syslog(LOG_NOTICE, "I2CONSET0 %02x", LPC_I2C0->I2CONSET);
59 syslog(LOG_NOTICE, "I2STAT0 %02x", LPC_I2C0->I2STAT);
64 LPC_I2C0->I2DAT = data0;
66 LPC_I2C0->I2CONCLR = 0x08;
68 if (LPC_I2C0->I2STAT != 0x28) {
70 syslog(LOG_NOTICE, "SI Clear, dataH sent. Expects 0x28 ");
71 syslog(LOG_NOTICE, "I2CONSET0 %02x", LPC_I2C0->I2CONSET);
72 syslog(LOG_NOTICE, "I2STAT0 %02x", LPC_I2C0->I2STAT);
76 LPC_I2C0->I2DAT = data1;
78 LPC_I2C0->I2CONCLR = 0x08;
80 if (LPC_I2C0->I2STAT != 0x28) {
82 syslog(LOG_NOTICE, "SI Clear, dataL sent. Expects 0x28 ");
83 syslog(LOG_NOTICE, "I2CONSET0 %02x", LPC_I2C0->I2CONSET);
84 syslog(LOG_NOTICE, "I2STAT0 %02x", LPC_I2C0->I2STAT);
88 LPC_I2C0->I2CONSET = 0x10;
91 LPC_I2C0->I2CONCLR = 0x08;
93 if (LPC_I2C0->I2STAT != 0xF8) {
95 syslog(LOG_NOTICE, "SI Clear. Expects 0xF8, NO SI ");
96 syslog(LOG_NOTICE, "I2CONSET0 %02x", LPC_I2C0->I2CONSET);
97 syslog(LOG_NOTICE, "I2STAT0 %02x", LPC_I2C0->I2STAT);