반응형
이번 예제는 온도센서에 대한 예제입니다.
main.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 34 35 36 37 38 39 40 41 42 43 44 45 | int main(void) { int32_t volatile temp; nrf_temp_init(); uint32_t err_code; APP_GPIOTE_INIT(1); const app_uart_comm_params_t comm_params = { RX_PIN_NUMBER, TX_PIN_NUMBER, RTS_PIN_NUMBER, CTS_PIN_NUMBER, APP_UART_FLOW_CONTROL_ENABLED, false, UART_BAUDRATE_BAUDRATE_Baud38400 }; APP_UART_FIFO_INIT(&comm_params, UART_RX_BUF_SIZE, UART_TX_BUF_SIZE, uart_error_handle, APP_IRQ_PRIORITY_LOW, err_code); APP_ERROR_CHECK(err_code); while (true) { NRF_TEMP->TASKS_START = 1; /** Start the temperature measurement. */ while (NRF_TEMP->EVENTS_DATARDY == 0) { // Do nothing. } NRF_TEMP->EVENTS_DATARDY = 0; temp = (nrf_temp_read() / 4); NRF_TEMP->TASKS_STOP = 1; /** Stop the temperature measurement. */ printf("Actual temperature: %d\n\r", (int)temp); nrf_delay_ms(500); } } | cs |
Line 5 : 온도센서 초기화하는 부분입니다.
1 2 3 4 | static __INLINE void nrf_temp_init(void) { *(uint32_t *) 0x4000C504 = 0; } | cs |
0x4000C000 번지는 온도센서의 기본 레지스터주소입니다.
그리고 뒤의 0x504번지는 Configuration register네요.
온도센서의 Configuration register를 0으로 설정하면 Read only access 가 됩니다.
Line 6~26 : uart를 설정합니다.
Line 30 : 온도센서를 동작시킵니다.
Line 32~36 : 온도값이 검출되기를 기다려 검출되면 다시 DataReady를 초기화합니다.
온도가 검출되면 DATARDY(data ready)가 1로 변합니다.
Line 38 : 온도값이 검출되었으니 TEMP에서 값을 읽어들입니다.
1 2 3 4 5 6 7 | #define MASK_SIGN (0x00000200UL) #define MASK_SIGN_EXTENSION (0xFFFFFC00UL) static __INLINE int32_t nrf_temp_read(void) { return ((NRF_TEMP->TEMP & MASK_SIGN) != 0) ? (NRF_TEMP->TEMP | MASK_SIGN_EXTENSION) : (NRF_TEMP->TEMP); } | cs |
읽어들인 값을 MASK_SIGN(0x200)과 '&'연산을 해서
0이 아니면 TEMP값에 0xFFFFFC00을 더해줍니다.
그리고 0이라면 값을 그대로 읽어들입니다.
이렇게 하는 이유는 2의 보수로 읽어들여서 그런것 같습니다.
읽어들인 값은 리턴되어 4로 나뉘어 집니다.
Line 40 : 온도센서를 작동 중지시킵니다.
Line 42 : 연산한 온도값을 UART로 뿌려줍니다.
중간에 칩을 손으로 만졌더니 온도가 올라갔네요^^
반응형
'Study > nRF51xxx(BLE)' 카테고리의 다른 글
nRF51 DK 예제 17 -SIMPLE TIMER (0) | 2015.03.13 |
---|---|
nRF51 DK 예제 16 -TIMER (0) | 2015.03.13 |
nRF51 DK 예제 14 -Real Time Counter(RTC) (0) | 2015.03.12 |
nRF51 DK 예제 13 - Random Number Generator(RNG) (0) | 2015.03.12 |
nRF51 DK 예제 12 - ram retention (0) | 2015.03.12 |