Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: YKNCT_I2C.cpp
- Revision:
- 11:c7c764e21224
- Parent:
- 10:49ffdd5cf82e
- Child:
- 14:5f0acdcd52ee
- Child:
- 15:23cf4a802b5b
- Child:
- 17:b78b92e5c4b5
- Child:
- 20:ee9aaf0877c5
--- a/YKNCT_I2C.cpp Wed Apr 17 10:32:03 2019 +0000 +++ b/YKNCT_I2C.cpp Thu Apr 18 11:00:50 2019 +0000 @@ -5,50 +5,59 @@ i2c.frequency(100000); } -void Y_I2C::Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value, uint8_t shift) +void Y_I2C::Out_Set(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num, uint8_t value) { if(value==1) - (OUT_I2C_Data+num) -> out_data |= 1<<shift; + (OUT_I2C_Data+num) -> out_data |= 1; else - (OUT_I2C_Data+num) -> out_data &= ~(1<<shift); + (OUT_I2C_Data+num) -> out_data &= 0; } -void Y_I2C::Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t num) +void Y_I2C::Out(OUT_I2C_Data_TypeDef *OUT_I2C_Data, uint8_t MAX) { - i2c.write((OUT_I2C_Data+num) -> DevAddress<<1, &(OUT_I2C_Data+num)->out_data, 1); - wait_us(1000); + int cnt=0; + int i=0; + while(cnt<MAX) { + char data=0; + int tmp=(OUT_I2C_Data+cnt)->DevAddress; + for(i=0;; i++) { + if(tmp!=(OUT_I2C_Data+cnt+i)->DevAddress) + break; + } + for(int j=0; j<=i; j++) data|=(OUT_I2C_Data+cnt+j)->out_data<<j; + + i2c.write((OUT_I2C_Data+cnt)->DevAddress<<1, &data, 1); + cnt+=i; + } } void Y_I2C::In(IN_I2C_Data_TypeDef *IN_I2C_Data, uint8_t num) { - static char data; + char data; uint8_t array=(IN_I2C_Data+num)->Number; - - i2c.read((IN_I2C_Data+num) -> DevAddress<<1, &data, 1); - - (IN_I2C_Data+num)->in_data=data&1<<array; - wait_us(1000); + + i2c.read((IN_I2C_Data+num)->DevAddress<<1, &data, 1); + + (IN_I2C_Data+num)->in_data=data&1<<array; } void Y_I2C::Adc(ADC_I2C_Data_TypeDef *ADC_I2C_Data, uint8_t num) { - static char data[8]= {0}; + char data[8]= {0}; uint8_t array=(ADC_I2C_Data+num)->Number; i2c.read((ADC_I2C_Data+num) -> DevAddress<<1, data, 8); - - (ADC_I2C_Data+num)->adc_data=data[array*2+1]<<8|data[array*2]; - wait_us(1000); + + (ADC_I2C_Data+num)->adc_data=data[array*2+1]<<8|data[array*2]; } void Y_I2C::Enc(ENC_I2C_Data_TypeDef *ENC_I2C_Data, uint8_t num) { - static char data[4]= {0}; + char data[4]= {0}; i2c.read((ENC_I2C_Data+num) -> DevAddress<<1, data, 4); (ENC_I2C_Data+num)->enc_data=data[3]<<24|data[2]<<16|data[1]<<8|data[0]; - wait_us(1000); } void Y_I2C::MD_I2C(MD_I2C_Data_TypeDef *MD_I2C_Data, uint8_t num) @@ -91,7 +100,6 @@ /*8bitから7bitに変換*/ i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2); - wait_us(1000); } /** @@ -112,5 +120,4 @@ /*8bitから7bitに変換*/ i2c.write((MD_I2C_Data + num)->DevAddress << 1,(MD_I2C_Data + num)->pData,2); - wait_us(1000); } \ No newline at end of file