ATY_LIB V2_102_230218
ATY_LIB for general devices or ALGO
 
Loading...
Searching...
No Matches
main.c File Reference
#include "nrf24l01.h"
#include <stdio.h>

Go to the source code of this file.

Macros

#define BUFF_UNITS   8
 
#define BUFF_SIZE   (BUFF_UNITS * NRF24_PLOAD_WIDTH)
 

Functions

void ADC_Init (void)
 
void SPI_Init (void)
 
void PWM_Init ()
 
void Timer0_Init ()
 
void INT_Init ()
 
 INTERRUPT (ADC_Routine, EXTI_VectADC)
 
 INTERRUPT (Timer0_Routine, EXTI_VectTimer0)
 
 INTERRUPT (Int2_Routine, EXTI_VectInt2)
 
void main (void)
 

Variables

const NRF24_SCEN CURRENT_SCEN = NRF24_SCEN_TX
 
uint16_t NRF24L01_rxsn
 
uint8_tNRF24L01_xbuf_data
 
__XDATA uint8_t MAIN_buf [2][BUFF_SIZE] = {{0}}
 
uint8_t MAIN_buf_index = 0
 
uint8_t MAIN_buf_pos = 0
 
uint8_t MAIN_ready_index = 0xFF
 
uint8_t MAIN_txrx_index
 
uint8_t MAIN_txrx_pos = 0
 

Macro Definition Documentation

◆ BUFF_SIZE

#define BUFF_SIZE   (BUFF_UNITS * NRF24_PLOAD_WIDTH)

Definition at line 50 of file main.c.

◆ BUFF_UNITS

#define BUFF_UNITS   8

Example code of wireless audio transer with NRF24L01 module

Pin connection: 8H3K32S2/8H1K08 NRF24L01 P35(SS, Ignored) => CSN 16 P34(MOSI) => MOSI 15 P33(MISO) => MISO 14 P32(SPCLK) => CLK 13 P36(INT2) => IRQ 17 P37(IO) => CE 18

TX: STC8H3K32S2 MAX9814 P11(ADC1) => MIC 3.3V => VDD 3.3V => GAIN GND => A/R GND => GND

RX: STC8H1K08 PAM8403 P10(PWM1P) => 200R => L or R Input GND => _|_ Input Ext 3.3V/5V => VCC Ext GND => GND

Note:

  1. Use individual power supply for PAM8403
  2. Switch RX_ADDRESS and TX_ADDRESS in nrf24l01.c for RX and TX

Definition at line 49 of file main.c.

Function Documentation

◆ ADC_Init()

void ADC_Init ( void  )

Definition at line 63 of file main.c.

64{
65 // Set ADC1(GPIO P1.1) HIP
67
68 // Channel: ADC1
69 ADC_SetChannel(0x01);
70 // ADC Clock = SYSCLK / 2 / (1+2) = SYSCLK / 6
72 // Left alignment, high 8-bit in ADC_RES
74 // Enable interrupts
77 // Turn on ADC power
79}
#define ADC_SetResultAlignmentLeft()
Definition: fw_adc.h:58
#define ADC_SetChannel(__CHANNEL__)
Definition: fw_adc.h:52
#define ADC_SetClockPrescaler(__PRESCALER__)
Definition: fw_adc.h:75
#define ADC_SetPowerState(__STATE__)
Definition: fw_adc.h:21
#define EXTI_ADC_SetIntState(__STATE__)
Definition: fw_exti.h:118
#define EXTI_Global_SetIntState(__STATE__)
Definition: fw_exti.h:115
@ GPIO_Pin_1
Definition: fw_gpio.h:46
#define GPIO_P1_SetMode(__PINS__, __MODE__)
Definition: fw_gpio.h:79
@ GPIO_Mode_Input_HIP
Definition: fw_gpio.h:25
@ HAL_State_ON
Definition: fw_types.h:71

◆ INT_Init()

void INT_Init ( )

Definition at line 151 of file main.c.

152{
155}
#define EXTI_Int2_SetIntState(__STATE__)
Definition: fw_exti.h:140

◆ INTERRUPT() [1/3]

INTERRUPT ( ADC_Routine  ,
EXTI_VectADC   
)

Definition at line 157 of file main.c.

158{
161 if (MAIN_buf_pos == BUFF_SIZE - 1)
162 {
163 MAIN_buf_pos = 0;
166 }
167 else
168 {
169 MAIN_buf_pos++;
170 }
171}
#define ADC_ClearInterrupt()
Definition: fw_adc.h:24
#define BUFF_SIZE
Definition: main.c:28
uint8_t MAIN_buf_index
Definition: main.c:57
uint8_t MAIN_ready_index
Definition: main.c:58
__XDATA uint8_t MAIN_buf[2][BUFF_SIZE]
Definition: main.c:56
uint8_t MAIN_buf_pos
Definition: main.c:57

◆ INTERRUPT() [2/3]

INTERRUPT ( Int2_Routine  ,
EXTI_VectInt2   
)

Definition at line 230 of file main.c.

231{
232 uint8_t pipe_num, status, i, *j;
233 status = NRF24L01_HandelIrqFlag();
234 pipe_num = (status >> 1) & 0x07;
235 if (pipe_num != 0x07)
236 {
239 while (i--)
240 {
242 }
243 //UART1_TxHex(MAIN_buf_pos);
244 if (MAIN_buf_pos == 0)
245 {
248 }
249 }
250}
unsigned char uint8_t
Definition: fw_types.h:18
uint8_t __XDATA i
void NRF24L01_HandelIrqFlag(void)
Definition: nrf24l01.c:111
#define NRF24_PLOAD_WIDTH
Definition: nrf24l01.h:101
uint8_t * NRF24L01_xbuf_data
Definition: nrf24l01.c:18

◆ INTERRUPT() [3/3]

INTERRUPT ( Timer0_Routine  ,
EXTI_VectTimer0   
)

Definition at line 173 of file main.c.

174{
175 uint8_t dc;
177 {
178 ADC_Start();
179 // MAIN_buf[MAIN_buf_index][MAIN_buf_pos] = voice_bulk[voice_pos++];
180 // if (MAIN_buf_pos == BUFF_SIZE - 1)
181 // {
182 // MAIN_buf_pos = 0;
183 // MAIN_ready_index = MAIN_buf_index;
184 // MAIN_buf_index = 1 - MAIN_buf_index;
185 // }
186 // else
187 // {
188 // MAIN_buf_pos++;
189 // }
190 // if (voice_pos == voice_size) voice_pos = 0;
191 }
192 else if (CURRENT_SCEN == NRF24_SCEN_RX)
193 {
194 if (MAIN_txrx_index == 0xFF)
195 {
196 if (MAIN_ready_index != 0xFF)
197 {
199 MAIN_ready_index = 0xFF;
200 MAIN_txrx_pos = 0;
201 }
202 }
203 if (MAIN_txrx_index != 0xFF)
204 {
207 // UART1_TxHex(dc);
208 // if (MAIN_txrx_pos % 32 == 0)
209 // {
210 // UART1_TxString("\r\n");
211 // }
212 if (MAIN_txrx_pos == BUFF_SIZE - 1)
213 {
214 MAIN_txrx_index = 0xFF;
215 if (MAIN_ready_index != 0xFF)
216 {
218 MAIN_ready_index = 0xFF;
219 MAIN_txrx_pos = 0;
220 }
221 }
222 else
223 {
225 }
226 }
227 }
228}
#define ADC_Start()
Definition: fw_adc.h:22
#define PWMA_PWM1_SetCaptureCompareValue(__16BIT_VAL__)
Definition: fw_pwm.h:232
@ NRF24_SCEN_TX
Definition: nrf24l01.h:113
@ NRF24_SCEN_RX
Definition: nrf24l01.h:112
uint8_t dc
Definition: main.c:25
uint8_t MAIN_txrx_pos
Definition: main.c:59
uint8_t MAIN_txrx_index
Definition: main.c:59
const NRF24_SCEN CURRENT_SCEN
Definition: main.c:52

◆ main()

void main ( void  )

Definition at line 252 of file main.c.

253{
254 uint8_t *tmp;
255 uint8_t pos = 0, succ = 0, err = 0, i;
256
257 SYS_SetClock();
258
259 // UART1, baud 115200, baud source Timer1, 1T mode, no interrupt
261 UART1_TxString("UART Initialized\r\n");
262
263 SPI_Init();
264 UART1_TxString("SPI Initialized\r\n");
265
266 while (NRF24L01_Check() == 1)
267 {
268 UART1_TxString("Check failed\r\n");
269 SYS_Delay(1000);
270 }
271 UART1_TxString("NRF24L01 Checked\r\n");
272
273 switch (CURRENT_SCEN)
274 {
275 case NRF24_SCEN_TX:
276 ADC_Init();
277 UART1_TxString("ADC Initialized\r\n");
278
279 Timer0_Init();
280 UART1_TxString("Timer0 Initialized\r\n");
281
283 UART1_TxString("NRF24L01 Initialized\r\n");
284 while (1)
285 {
286 if (MAIN_ready_index != 0xFF)
287 {
289 MAIN_ready_index = 0xFF;
290 for (pos = 0; pos < BUFF_UNITS; pos++)
291 {
293 // for (i = 0; i < 32; i++)
294 // {
295 // UART1_TxHex(*(tmp + i));
296 // }
297 // UART1_TxString("\r\n");
298 if (NRF24L01_WriteFast(tmp) == 0)
299 {
301 err++;
302 }
303 else
304 {
305 succ++;
306 }
307 if (err >= 255 || succ >= 255)
308 {
309 UART1_TxHex(err);
310 UART1_TxHex(succ);
311 UART1_TxString("\r\n");
312 err = 0;
313 succ = 0;
314 }
315 //SYS_Delay(1);
316 }
317
318 }
319 }
320 break;
321
322 case NRF24_SCEN_RX:
323 INT_Init();
324 PWM_Init();
325 Timer0_Init();
326 UART1_TxString("Timer0 Initialized\r\n");
328 while (1)
329 {
332 UART1_TxString("\r\n");
333 SYS_Delay(1000);
334 }
335 break;
336
339 INT_Init();
340 while (1)
341 {
342 NRF24L01_Tx(tmp);
343 SYS_Delay(1000);
344 }
345 break;
346
347 default:
348 UART1_TxString("Unknown scen\r\n");
349 break;
350 }
351}
uint8_t pos
void SYS_SetClock(void)
Definition: fw_sys.c:40
void SYS_Delay(uint16_t t)
Definition: fw_sys.c:65
void UART1_TxString(uint8_t *str)
Definition: fw_uart.c:85
@ UART1_BaudSource_Timer1
Definition: fw_uart.h:33
void UART1_TxHex(uint8_t hex)
Definition: fw_uart.c:79
void UART1_Config8bitUart(UART1_BaudSource_t baudSource, HAL_State_t _1TMode, uint32_t baudrate)
Definition: fw_uart.c:56
uint8_t NRF24L01_WriteFast(const void *pBuf)
Definition: nrf24l01.c:149
void NRF24L01_Init(NRF24_MODE mode)
Definition: nrf24l01.c:181
void NRF24L01_ResetTX(void)
Definition: nrf24l01.c:161
uint8_t NRF24L01_Check(void)
Definition: nrf24l01.c:168
void NRF24L01_Tx(uint8_t *pBuf)
Definition: nrf24l01.c:131
@ NRF24_SCEN_HALF_DUPLEX
Definition: nrf24l01.h:114
@ NRF24_MODE_TX
Definition: nrf24l01.h:107
@ NRF24_MODE_RX
Definition: nrf24l01.h:106
void Timer0_Init()
Definition: main.c:63
void PWM_Init()
Definition: main.c:28
void SPI_Init(void)
Definition: main.c:36
void INT_Init()
Definition: main.c:67
uint16_t NRF24L01_rxsn
Definition: nrf24l01.c:19
void ADC_Init(void)
Definition: main.c:63
#define BUFF_UNITS
Definition: main.c:49

◆ PWM_Init()

void PWM_Init ( )

Definition at line 108 of file main.c.

109{
110 // Set GPIO pins output mode P10 -> PWMA.1P
112 // Turn off PWMA.1 before change its mode
115 // Set PWMA.1 port direction output
117 // Set PWMA.1 output low voltage when counter is less than target value
119 // Enable comparison value preload to make duty cycle changing smooth
121 // Turn on PWMA.1
123
124 // Set PWM frequency to 16kHz, Fpwm = SYSCLK / (PWMx_PSCR + 1) / (PWMx_ARR + 1)
126 // PWM width = Period + 1 (side alignment), or AutoReloadPeriod * 2 (center alignment)
127 PWMA_SetPeriod(0xFF);
128 // Counter direction, down:from [PWMA_ARRH,PWMA_ARRL] to 0
130 // Enable preload on reload-period
132 // Enable output on PWMA.1P
134 // Set PWMA.1 alternative ports to P1.0 and P1.1
136 // Enable overall output
138 // Start counter
140}
@ GPIO_Pin_0
Definition: fw_gpio.h:45
@ GPIO_Mode_Output_PP
Definition: fw_gpio.h:24
#define PWMA_SetOverallState(__STATE__)
Definition: fw_pwm.h:102
#define PWMA_SetPinOutputState(__PINS__, __STATE__)
Definition: fw_pwm.h:105
#define PWMA_PWM1_SetPortState(__STATE__)
Definition: fw_pwm.h:159
#define PWMA_PWM1_SetPort(__ALTER_PORT__)
Definition: fw_pwm.h:291
#define PWMA_PWM1N_SetPortState(__STATE__)
Definition: fw_pwm.h:161
#define PWMA_PWM1_SetComparePreload(__STATE__)
Definition: fw_pwm.h:208
#define PWMA_PWM1_SetPortDirection(__PORT_DIR__)
Definition: fw_pwm.h:190
@ PWM_OutputMode_PWM_HighIfLess
Definition: fw_pwm.h:70
#define PWMA_PWM1_ConfigOutputMode(__MODE__)
Definition: fw_pwm.h:216
#define PWMA_SetPrescaler(__16BIT_VAL__)
Definition: fw_pwm.h:87
@ PWMA_PWM1_AlterPort_P10_P11
Definition: fw_pwm.h:263
#define PWMA_SetAutoReloadPreload(__STATE__)
Definition: fw_pwm.h:122
#define PWMA_SetPeriod(__16BIT_VAL__)
Definition: fw_pwm.h:94
@ PWMB_PortDirOut
Definition: fw_pwm.h:407
#define PWMA_SetCounterDirection(__DIR__)
Definition: fw_pwm.h:135
@ PWM_CounterDirection_Down
Definition: fw_pwm.h:56
@ PWM_Pin_1
Definition: fw_pwm.h:24
#define PWMA_SetCounterState(__STATE__)
Definition: fw_pwm.h:154
@ HAL_State_OFF
Definition: fw_types.h:70

◆ SPI_Init()

void SPI_Init ( void  )

Definition at line 81 of file main.c.

82{
83 // MISO(P33) MOSI(P34)
85 // SCLK(P32) CSN(P35) CE(P37)
87 // IRQ(P36)
89
90 // ST7567 doesn't work if SPI frequency is too high
92 // Clock idles low
94 // Data transfer is driven by lower SS pin
96 // MSB first
98 // Define the output pins
100 // Ignore SS pin, use MSTR to swith between master/slave mode
102 // Master mode
104 // Start SPI
106}
#define GPIO_P3_SetMode(__PINS__, __MODE__)
Definition: fw_gpio.h:89
@ GPIO_Pin_5
Definition: fw_gpio.h:50
@ GPIO_Pin_2
Definition: fw_gpio.h:47
@ GPIO_Pin_4
Definition: fw_gpio.h:49
@ GPIO_Pin_6
Definition: fw_gpio.h:51
@ GPIO_Pin_7
Definition: fw_gpio.h:52
@ GPIO_Mode_InOut_QBD
Definition: fw_gpio.h:23
#define SPI_SetClockPrescaler(__PRE_SCALER__)
Definition: fw_spi.h:88
#define SPI_SetPort(__ALTER_PORT__)
Definition: fw_spi.h:92
#define SPI_SetDataOrder(__ORDER__)
Definition: fw_spi.h:70
@ SPI_ClockPreScaler_16
Definition: fw_spi.h:47
#define SPI_SetEnabled(__STATE__)
Definition: fw_spi.h:69
#define SPI_SetClockPolarity(__STATE__)
Definition: fw_spi.h:78
#define SPI_SetClockPhase(__PHASE__)
Definition: fw_spi.h:84
@ SPI_ClockPhase_LeadingEdge
Definition: fw_spi.h:53
#define SPI_IgnoreSlaveSelect(__STATE__)
Definition: fw_spi.h:68
#define SPI_SetMasterMode(__STATE__)
Definition: fw_spi.h:71
@ SPI_AlterPort_P35_P34_P33_P32
Definition: fw_spi.h:39
@ SPI_DataOrder_MSB
Definition: fw_spi.h:59

◆ Timer0_Init()

void Timer0_Init ( )

Definition at line 142 of file main.c.

143{
149}
#define EXTI_Timer0_SetIntPriority(__PRIORITY__)
Definition: fw_exti.h:214
@ EXTI_IntPriority_High
Definition: fw_exti.h:25
#define EXTI_Timer0_SetIntState(__STATE__)
Definition: fw_exti.h:116
@ TIM_TimerMode_16BitAuto
Definition: fw_tim.h:24
void TIM_Timer0_Config(HAL_State_t freq1t, TIM_TimerMode_t mode, uint16_t frequency)
Definition: fw_tim.c:38
#define TIM_Timer0_SetRunState(__STATE__)
Definition: fw_tim.h:35

Variable Documentation

◆ CURRENT_SCEN

const NRF24_SCEN CURRENT_SCEN = NRF24_SCEN_TX

Definition at line 52 of file main.c.

◆ MAIN_buf

__XDATA uint8_t MAIN_buf[2][BUFF_SIZE] = {{0}}

Definition at line 56 of file main.c.

◆ MAIN_buf_index

uint8_t MAIN_buf_index = 0

Definition at line 57 of file main.c.

◆ MAIN_buf_pos

uint8_t MAIN_buf_pos = 0

Definition at line 57 of file main.c.

◆ MAIN_ready_index

uint8_t MAIN_ready_index = 0xFF

Definition at line 58 of file main.c.

◆ MAIN_txrx_index

uint8_t MAIN_txrx_index

Definition at line 59 of file main.c.

◆ MAIN_txrx_pos

uint8_t MAIN_txrx_pos = 0

Definition at line 59 of file main.c.

◆ NRF24L01_rxsn

uint16_t NRF24L01_rxsn
extern

Definition at line 19 of file nrf24l01.c.

◆ NRF24L01_xbuf_data

uint8_t* NRF24L01_xbuf_data
extern

Definition at line 18 of file nrf24l01.c.