@@ -31,45 +31,46 @@ void pinMode( uint32_t ulPin, uint32_t ulMode )
3131 return ;
3232 }
3333
34- ulPin = g_ADigitalPinMap [ulPin ];
34+ NRF_GPIO_Type * port = digitalPinToPort (ulPin );
35+ uint32_t pin = digitalPinToPin (ulPin );
3536
3637 // Set pin mode according to chapter '22.6.3 I/O Pin Configuration'
3738 switch ( ulMode )
3839 {
3940 case INPUT :
4041 // Set pin to input mode
41- NRF_GPIO -> PIN_CNF [ulPin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
42- | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
43- | ((uint32_t )GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos )
44- | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
45- | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
42+ port -> PIN_CNF [pin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
43+ | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
44+ | ((uint32_t )GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos )
45+ | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
46+ | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
4647 break ;
4748
4849 case INPUT_PULLUP :
4950 // Set pin to input mode with pull-up resistor enabled
50- NRF_GPIO -> PIN_CNF [ulPin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
51- | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
52- | ((uint32_t )GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos )
53- | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
54- | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
51+ port -> PIN_CNF [pin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
52+ | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
53+ | ((uint32_t )GPIO_PIN_CNF_PULL_Pullup << GPIO_PIN_CNF_PULL_Pos )
54+ | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
55+ | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
5556 break ;
5657
5758 case INPUT_PULLDOWN :
5859 // Set pin to input mode with pull-down resistor enabled
59- NRF_GPIO -> PIN_CNF [ulPin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
60- | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
61- | ((uint32_t )GPIO_PIN_CNF_PULL_Pulldown << GPIO_PIN_CNF_PULL_Pos )
62- | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
63- | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
60+ port -> PIN_CNF [pin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Input << GPIO_PIN_CNF_DIR_Pos )
61+ | ((uint32_t )GPIO_PIN_CNF_INPUT_Connect << GPIO_PIN_CNF_INPUT_Pos )
62+ | ((uint32_t )GPIO_PIN_CNF_PULL_Pulldown << GPIO_PIN_CNF_PULL_Pos )
63+ | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
64+ | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
6465 break ;
6566
6667 case OUTPUT :
6768 // Set pin to output mode
68- NRF_GPIO -> PIN_CNF [ulPin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos )
69- | ((uint32_t )GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos )
70- | ((uint32_t )GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos )
71- | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
72- | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
69+ port -> PIN_CNF [pin ] = ((uint32_t )GPIO_PIN_CNF_DIR_Output << GPIO_PIN_CNF_DIR_Pos )
70+ | ((uint32_t )GPIO_PIN_CNF_INPUT_Disconnect << GPIO_PIN_CNF_INPUT_Pos )
71+ | ((uint32_t )GPIO_PIN_CNF_PULL_Disabled << GPIO_PIN_CNF_PULL_Pos )
72+ | ((uint32_t )GPIO_PIN_CNF_DRIVE_S0S1 << GPIO_PIN_CNF_DRIVE_Pos )
73+ | ((uint32_t )GPIO_PIN_CNF_SENSE_Disabled << GPIO_PIN_CNF_SENSE_Pos );
7374 break ;
7475
7576 default :
@@ -84,16 +85,17 @@ void digitalWrite( uint32_t ulPin, uint32_t ulVal )
8485 return ;
8586 }
8687
87- ulPin = g_ADigitalPinMap [ulPin ];
88+ NRF_GPIO_Type * port = digitalPinToPort (ulPin );
89+ uint32_t mask = digitalPinToBitMask (ulPin );
8890
8991 switch ( ulVal )
9092 {
9193 case LOW :
92- NRF_GPIO -> OUTCLR = ( 1UL << ulPin ) ;
94+ port -> OUTCLR = mask ;
9395 break ;
9496
9597 default :
96- NRF_GPIO -> OUTSET = ( 1UL << ulPin ) ;
98+ port -> OUTSET = mask ;
9799 break ;
98100 }
99101
@@ -106,9 +108,10 @@ int digitalRead( uint32_t ulPin )
106108 return 0 ;
107109 }
108110
109- ulPin = g_ADigitalPinMap [ulPin ];
111+ NRF_GPIO_Type * port = digitalPinToPort (ulPin );
112+ uint32_t pin = digitalPinToPin (ulPin );
110113
111- return ((NRF_GPIO -> IN >> ulPin ) & 1UL ) ? HIGH : LOW ;
114+ return ((port -> IN >> pin ) & 1UL ) ? HIGH : LOW ;
112115}
113116
114117#ifdef __cplusplus
0 commit comments