调试NRF51822 SPI 和LIS3DH通讯, 碰到一个很奇葩的问题,做一下记录。以免自己忘记。 测试了10多个小时。

起因

NRF51822 和 LIS3DH通讯, 并把数据通过ble_uart协议发送到手机上。 之前已经做过一次。 代码基本现成。 但就是在读取不到数据。
找了很久代码的原因。依然没有找到。 后来突然想起来。工程文件好像之前清理过。 因为之前的项目用不到SPI, 把SPI相关的信息清了。
SPI_NRF51

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 //SPI_MASTER_0_ENABLE
#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 //SPI_MASTER_1_ENABLE

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);

留言