[NUCLEO_L053R8] Add object pin init for SPI + typo for I2C

pull/326/head
bcostm 2014-05-23 16:14:30 +02:00
parent 99a176f7d5
commit 48a53c4be0
2 changed files with 15 additions and 10 deletions

View File

@ -165,8 +165,8 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) {
/* update CR2 register */ /* update CR2 register */
i2c->CR2 = (i2c->CR2 & (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP))) i2c->CR2 = (i2c->CR2 & (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP)))
| (uint32_t)(((uint32_t)address & I2C_CR2_SADD) | (((uint32_t)length << 16 ) & I2C_CR2_NBYTES) | (uint32_t)I2C_SOFTEND_MODE | (uint32_t)I2C_GENERATE_START_READ); | (uint32_t)(((uint32_t)address & I2C_CR2_SADD) | (((uint32_t)length << 16) & I2C_CR2_NBYTES) | (uint32_t)I2C_SOFTEND_MODE | (uint32_t)I2C_GENERATE_START_READ);
// Read all bytes // Read all bytes
for (count = 0; count < length; count++) { for (count = 0; count < length; count++) {
value = i2c_byte_read(obj, 0); value = i2c_byte_read(obj, 0);
@ -181,7 +181,8 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) {
return 0; return 0;
} }
} }
__HAL_I2C_CLEAR_FLAG(&I2cHandle,I2C_FLAG_TC);
__HAL_I2C_CLEAR_FLAG(&I2cHandle, I2C_FLAG_TC);
// If not repeated start, send stop. // If not repeated start, send stop.
if (stop) { if (stop) {
@ -211,10 +212,8 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) {
/* update CR2 register */ /* update CR2 register */
i2c->CR2 = (i2c->CR2 & (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP))) i2c->CR2 = (i2c->CR2 & (uint32_t)~((uint32_t)(I2C_CR2_SADD | I2C_CR2_NBYTES | I2C_CR2_RELOAD | I2C_CR2_AUTOEND | I2C_CR2_RD_WRN | I2C_CR2_START | I2C_CR2_STOP)))
| (uint32_t)(((uint32_t)address & I2C_CR2_SADD) | (((uint32_t)length << 16 ) & I2C_CR2_NBYTES) | (uint32_t)I2C_SOFTEND_MODE | (uint32_t)I2C_GENERATE_START_WRITE); | (uint32_t)(((uint32_t)address & I2C_CR2_SADD) | (((uint32_t)length << 16) & I2C_CR2_NBYTES) | (uint32_t)I2C_SOFTEND_MODE | (uint32_t)I2C_GENERATE_START_WRITE);
for (count = 0; count < length; count++) { for (count = 0; count < length; count++) {
i2c_byte_write(obj, data[count]); i2c_byte_write(obj, data[count]);
} }
@ -225,9 +224,10 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) {
timeout--; timeout--;
if (timeout == 0) { if (timeout == 0) {
return 0; return 0;
}
} }
}
__HAL_I2C_CLEAR_FLAG(&I2cHandle,I2C_FLAG_TC); __HAL_I2C_CLEAR_FLAG(&I2cHandle, I2C_FLAG_TC);
// If not repeated start, send stop. // If not repeated start, send stop.
if (stop) { if (stop) {
@ -275,7 +275,7 @@ int i2c_byte_write(i2c_t *obj, int data) {
} }
i2c->TXDR = (uint8_t)data; i2c->TXDR = (uint8_t)data;
return 1; return 1;
} }
@ -355,7 +355,7 @@ int i2c_slave_receive(i2c_t *obj) {
int i2c_slave_read(i2c_t *obj, char *data, int length) { int i2c_slave_read(i2c_t *obj, char *data, int length) {
char size = 0; char size = 0;
if (length == 0) return 0; if (length == 0) return 0;
while (size < length) data[size++] = (char)i2c_byte_read(obj, 0); while (size < length) data[size++] = (char)i2c_byte_read(obj, 0);

View File

@ -129,6 +129,11 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel
obj->cpha = SPI_PHASE_1EDGE; obj->cpha = SPI_PHASE_1EDGE;
obj->br_presc = SPI_BAUDRATEPRESCALER_256; obj->br_presc = SPI_BAUDRATEPRESCALER_256;
obj->pin_miso = miso;
obj->pin_mosi = mosi;
obj->pin_sclk = sclk;
obj->pin_ssel = ssel;
if (ssel == NC) { // SW NSS Master mode if (ssel == NC) { // SW NSS Master mode
obj->mode = SPI_MODE_MASTER; obj->mode = SPI_MODE_MASTER;
obj->nss = SPI_NSS_SOFT; obj->nss = SPI_NSS_SOFT;