调试NRF51822 SPI 和LIS3DH通讯, 碰到一个很奇葩的问题,做一下记录。以免自己忘记。 测试了10多个小时。
起因
NRF51822 和 LIS3DH通讯, 并把数据通过ble_uart协议发送到手机上。 之前已经做过一次。 代码基本现成。 但就是在读取不到数据。
找了很久代码的原因。依然没有找到。 后来突然想起来。工程文件好像之前清理过。 因为之前的项目用不到SPI, 把SPI相关的信息清了。
SPI_MASTER_0_ENABLE
主要问题是在 components\drivers_nrf\spi_master\spi_master.c
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| #ifdef SPI_MASTER_0_ENABLE * @brief SPI0 interrupt handler. */ void SPI0_TWI0_IRQHandler(void) { if ((NRF_SPI0->EVENTS_READY == 1) && (NRF_SPI0->INTENSET & SPI_INTENSET_READY_Msk)) { NRF_SPI0->EVENTS_READY = 0; volatile spi_master_instance_t * p_spi_instance = spi_master_get_instance(SPI_MASTER_0); spi_master_send_recv_irq(p_spi_instance); } } #endif #ifdef SPI_MASTER_1_ENABLE * @brief SPI0 interrupt handler. */ void SPI1_TWI1_IRQHandler(void) { if ((NRF_SPI1->EVENTS_READY == 1) && (NRF_SPI1->INTENSET & SPI_INTENSET_READY_Msk)) { NRF_SPI1->EVENTS_READY = 0; volatile spi_master_instance_t * p_spi_instance = spi_master_get_instance(SPI_MASTER_1); spi_master_send_recv_irq(p_spi_instance); } } #endif
|
DEBUG_NRF_USER
可能这个非必须, 只是因为我调用到了这个函数。
components\libraries\util\nrf_assert.h
1 2 3
| #if defined(DEBUG_NRF) || defined(DEBUG_NRF_USER) void assert_nrf_callback(uint16_t line_num, const uint8_t *file_name);
|