Nodic 开发板上的使用

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/wuzengfengjing1/article/details/52344829

GPIO的控制部分,经常用来操作LED灯,读取BUTTON的状态。

对GPIO的控制部分,主要是在nrf_gpio.h中,最基本的几个接口使用:

nrf_gpio_cfg_output

nrf_gpio_cfg_input

nrf_gpio_pin_set

nrf_gpio_pin_clear

nrf_gpio_pin_read


Common部分,经常会用到us级别的延迟。

在nrf_delay.h中需要对如下的接口了解。

nrf_delay_us



timer部分。



Uart部分。

在simple_uart.c中。

simple_uart_config,默认波特率是38400.

simple_uart_putstring

simple_uart_put

simple_uart_get_with_timeout

simple_uart_get


SPI master部分。

在spi_master.c中。

spi_master_open

spi_master_evt_handler_reg

spi_master_send_recv

在spi_slave.c中。

spi_slave_init

spi_slave_buffers_set

spi_slave_evt_handler_register



arm_startup_nrf51.s中的技术细节。

中断向量表的定义如下

__Vectors       DCD     __initial_sp              ; Top of Stack
                DCD     Reset_Handler             ; Reset Handler
                DCD     NMI_Handler               ; NMI Handler
                DCD     HardFault_Handler         ; Hard Fault Handler
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     SVC_Handler               ; SVCall Handler
                DCD     0                         ; Reserved
                DCD     0                         ; Reserved
                DCD     PendSV_Handler            ; PendSV Handler
                DCD     SysTick_Handler           ; SysTick Handler

                ; External Interrupts
                DCD      POWER_CLOCK_IRQHandler ;POWER_CLOCK
                DCD      RADIO_IRQHandler ;RADIO
                DCD      UART0_IRQHandler ;UART0
                DCD      SPI0_TWI0_IRQHandler ;SPI0_TWI0
                DCD      SPI1_TWI1_IRQHandler ;SPI1_TWI1
                DCD      0 ;Reserved
                DCD      GPIOTE_IRQHandler ;GPIOTE
                DCD      ADC_IRQHandler ;ADC
                DCD      TIMER0_IRQHandler ;TIMER0
                DCD      TIMER1_IRQHandler ;TIMER1
                DCD      TIMER2_IRQHandler ;TIMER2
                DCD      RTC0_IRQHandler ;RTC0
                DCD      TEMP_IRQHandler ;TEMP
                DCD      RNG_IRQHandler ;RNG
                DCD      ECB_IRQHandler ;ECB
                DCD      CCM_AAR_IRQHandler ;CCM_AAR
                DCD      WDT_IRQHandler ;WDT
                DCD      RTC1_IRQHandler ;RTC1
                DCD      QDEC_IRQHandler ;QDEC
                DCD      LPCOMP_IRQHandler ;LPCOMP
                DCD      SWI0_IRQHandler ;SWI0
                DCD      SWI1_IRQHandler ;SWI1
                DCD      SWI2_IRQHandler ;SWI2
                DCD      SWI3_IRQHandler ;SWI3
                DCD      SWI4_IRQHandler ;SWI4
                DCD      SWI5_IRQHandler ;SWI5
                DCD      0 ;Reserved
                DCD      0 ;Reserved
                DCD      0 ;Reserved
                DCD      0 ;Reserved
                DCD      0 ;Reserved
                DCD      0 ;Reserved
__Vectors_End


例如我们经常会在外面定义GPIOTE_IRQHandler如下,这样就和中断向量表中的定义就对应起来了。

void GPIOTE_IRQHandler(void)
{
if(NRF_GPIOTE->EVENTS_PORT !=0)
{
NRF_GPIOTE->EVENTS_PORT = 0;                          //clear the PORT EVENT
for(uint8_t i=0; i<BUTTONS_NUMBER; i++)
{
if(nrf_gpio_pin_read(buttons_list[i]) == 0) 
{
nrf_delay_ms(10);                                        //delete jitter
if(nrf_gpio_pin_read(buttons_list[i]) == 0)  nrf_gpio_pin_toggle(leds_list[i]);
}
}
}
}



熟悉一些常见的汇编指令。

NRF_POWER_RAMONx_RAMxON_ONMODE_Msk EQU   0x3 

MOVS    R1, #NRF_POWER_RAMONx_RAMxON_ONMODE_Msk

这样R1寄存器的之就是3


NRF_POWER_RAMON_ADDRESS            EQU   0x40000524

LDR     R0, =NRF_POWER_RAMON_ADDRESS

这样R0寄存器的值就是0x40000524


LDR     R2, [R0]

这是R2的值就是0x00000003



LDR     R0, =SystemInit
                BLX     R0
                LDR     R0, =__main
                BX      R0
                ENDP

在编译出来的map文件中,可以看到SystemInit接口是在

SystemInit                               0x000001b5   Thumb Code    64  system_nrf51.o(i.SystemInit)

__main                                   0x000000c1   Thumb Code     0  entry.o(.ARM.Collect$$$$00000000)



谢谢

猜你喜欢

转载自blog.csdn.net/wuzengfengjing1/article/details/52344829