Пример #1
0
Файл: spi.c Проект: pix/libmaple
/**
 * @brief Nonblocking SPI transmit.
 * @param dev SPI port to use for transmission
 * @param buf Buffer to transmit.  The sizeof buf's elements are
 *            inferred from dev's data frame format (i.e., are
 *            correctly treated as 8-bit or 16-bit quantities).
 * @param len Maximum number of elements to transmit.
 * @return Number of elements transmitted.
 */
uint32 spi_tx(spi_dev *dev, const void *buf, uint32 len) {
    uint32 txed = 0;
    uint8 byte_frame = spi_dff(dev) == SPI_DFF_8_BIT;
    while (spi_is_tx_empty(dev) && (txed < len)) {
        if (byte_frame) {
            dev->regs->DR = ((const uint8*)buf)[txed++];
        } else {
            dev->regs->DR = ((const uint16*)buf)[txed++];
        }
    }
    return txed;
}
Пример #2
0
/**
 * @brief Nonblocking SPI transmit.
 * @param dev SPI port to use for transmission
 * @param buf Buffer to transmit.  The sizeof buf's elements are
 *            inferred from dev's data frame format (i.e., are
 *            correctly treated as 8-bit or 16-bit quantities).
 * @param len Maximum number of elements to transmit.
 * @return Number of elements transmitted.
 */
uint32 spi_tx(spi_dev *dev, const void *buf, uint32 len) {
    uint32 txed = 0;
    uint8 byte_frame = spi_dff(dev) == SPI_DFF_8_BIT;
    while ((txed < len)) {
        while(!spi_is_tx_empty(dev))
            ;
        if (byte_frame) {
            //spi_tx_reg((((const uint8*)buf)[txed++] & 0X0000) );
            dev->regs->DR = ((const uint8*)buf)[txed++];
        } else {
            //spi_tx_reg(((const uint16*)buf)[txed++]);
            dev->regs->DR = ((const uint16*)buf)[txed++];
        }
    }
    return txed;
}