mirror of https://github.com/ARMmbed/mbed-os.git
Merge branch 'master' of git://github.com/dbestm/mbed into dbestm-master
Conflicts: libraries/mbed/targets/hal/TARGET_STM/TARGET_NUCLEO_L152RE/i2c_api.cpull/298/merge
commit
e6f6f73239
|
@ -42,10 +42,10 @@
|
|||
#define DEVICE_SERIAL 1
|
||||
|
||||
#define DEVICE_I2C 1
|
||||
#define DEVICE_I2CSLAVE 0 // Not yet supported
|
||||
#define DEVICE_I2CSLAVE 1
|
||||
|
||||
#define DEVICE_SPI 1
|
||||
#define DEVICE_SPISLAVE 0 // Not yet supported
|
||||
#define DEVICE_SPISLAVE 1
|
||||
|
||||
#define DEVICE_RTC 1
|
||||
|
||||
|
|
|
@ -313,7 +313,44 @@ void i2c_slave_mode(i2c_t *obj, int enable_slave) {
|
|||
#define WriteAddressed 3 // the master is writing to this slave (slave = receiver)
|
||||
|
||||
int i2c_slave_receive(i2c_t *obj) {
|
||||
return (0);
|
||||
int retValue = NoData;
|
||||
uint32_t event;
|
||||
I2C_TypeDef *i2c = (I2C_TypeDef *)(obj->i2c);
|
||||
|
||||
event = I2C_GetLastEvent( i2c );
|
||||
if(event != 0)
|
||||
{
|
||||
switch(event){
|
||||
case I2C_EVENT_SLAVE_RECEIVER_ADDRESS_MATCHED:
|
||||
retValue = WriteAddressed;
|
||||
break;
|
||||
case I2C_EVENT_SLAVE_TRANSMITTER_ADDRESS_MATCHED:
|
||||
retValue = ReadAddressed;
|
||||
break;
|
||||
case I2C_EVENT_SLAVE_GENERALCALLADDRESS_MATCHED:
|
||||
retValue = WriteGeneral;
|
||||
break;
|
||||
default:
|
||||
retValue = NoData;
|
||||
break;
|
||||
}
|
||||
|
||||
// clear ADDR
|
||||
if((retValue == WriteAddressed) || (retValue == ReadAddressed)){
|
||||
i2c->SR1;// read status register 1
|
||||
i2c->SR2;// read status register 2
|
||||
}
|
||||
// clear stopf
|
||||
if(I2C_GetFlagStatus(i2c, I2C_FLAG_STOPF) == SET) {
|
||||
i2c->SR1;// read status register 1
|
||||
I2C_Cmd(i2c, ENABLE);
|
||||
}
|
||||
// clear AF
|
||||
if(I2C_GetFlagStatus(i2c, I2C_FLAG_AF) == SET) {
|
||||
I2C_ClearFlag(i2c, I2C_FLAG_AF);
|
||||
}
|
||||
}
|
||||
return(retValue);
|
||||
}
|
||||
|
||||
int i2c_slave_read(i2c_t *obj, char *data, int length) {
|
||||
|
|
|
@ -138,7 +138,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
|
|||
} else { // Slave
|
||||
pinmap_pinout(ssel, PinMap_SPI_SSEL);
|
||||
obj->mode = SPI_Mode_Slave;
|
||||
obj->nss = SPI_NSS_Soft;
|
||||
obj->nss = SPI_NSS_Hard;
|
||||
}
|
||||
|
||||
init_spi(obj);
|
||||
|
@ -270,7 +270,8 @@ int spi_master_write(spi_t *obj, int value) {
|
|||
}
|
||||
|
||||
int spi_slave_receive(spi_t *obj) {
|
||||
return (ssp_readable(obj) && !ssp_busy(obj)) ? (1) : (0);
|
||||
//return (ssp_readable(obj) && !ssp_busy(obj)) ? (1) : (0); // initial code
|
||||
return (ssp_readable(obj)) ? (1) : (0); // works better like this
|
||||
};
|
||||
|
||||
int spi_slave_read(spi_t *obj) {
|
||||
|
|
Loading…
Reference in New Issue