Add an argument to ISRs. Disable interrupts while masking them.
This commit is contained in:
		
							parent
							
								
									ec5dabd237
								
							
						
					
					
						commit
						5583543f14
					
				
					 16 changed files with 87 additions and 59 deletions
				
			
		|  | @ -62,7 +62,7 @@ void sdk_rom_i2c_writeReg_Mask(uint32_t block, uint32_t host_id, | |||
|             reg_add##_lsb,  indata) | ||||
| 
 | ||||
| 
 | ||||
| void i2s_dma_init(i2s_dma_isr_t isr, i2s_clock_div_t clock_div, i2s_pins_t pins) | ||||
| void i2s_dma_init(i2s_dma_isr_t isr, void *arg, i2s_clock_div_t clock_div, i2s_pins_t pins) | ||||
| { | ||||
|     // reset DMA
 | ||||
|     SET_MASK_BITS(SLC.CONF0, SLC_CONF0_RX_LINK_RESET); | ||||
|  | @ -83,7 +83,7 @@ void i2s_dma_init(i2s_dma_isr_t isr, i2s_clock_div_t clock_div, i2s_pins_t pins) | |||
|             SLC_RX_DESCRIPTOR_CONF_RX_EOF_MODE | SLC_RX_DESCRIPTOR_CONF_RX_FILL_MODE); | ||||
| 
 | ||||
|     if (isr) { | ||||
|         _xt_isr_attach(INUM_SLC, isr); | ||||
|         _xt_isr_attach(INUM_SLC, isr, arg); | ||||
|         SET_MASK_BITS(SLC.INT_ENABLE, SLC_INT_ENABLE_RX_EOF); | ||||
|         SLC.INT_CLEAR = 0xFFFFFFFF; | ||||
|         _xt_isr_unmask(1<<INUM_SLC); | ||||
|  |  | |||
|  | @ -32,7 +32,7 @@ | |||
| extern "C" { | ||||
| #endif | ||||
| 
 | ||||
| typedef void (*i2s_dma_isr_t)(void); | ||||
| typedef void (*i2s_dma_isr_t)(void *); | ||||
| 
 | ||||
| typedef struct dma_descriptor { | ||||
|     uint32_t blocksize:12; | ||||
|  | @ -61,10 +61,11 @@ typedef struct { | |||
|  * Initialize I2S and DMA subsystems. | ||||
|  * | ||||
|  * @param isr ISR handler. Can be NULL if interrupt handling is not needed. | ||||
|  * @param arg ISR handler arg. | ||||
|  * @param clock_div I2S clock configuration. | ||||
|  * @param pins I2S pin configuration. Specifies which pins are enabled in I2S. | ||||
|  */ | ||||
| void i2s_dma_init(i2s_dma_isr_t isr, i2s_clock_div_t clock_div, i2s_pins_t pins); | ||||
| void i2s_dma_init(i2s_dma_isr_t isr, void *arg, i2s_clock_div_t clock_div, i2s_pins_t pins); | ||||
| 
 | ||||
| /**
 | ||||
|  * Calculate I2S dividers for the specified frequency. | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ typedef struct pwmInfoDefinition | |||
| 
 | ||||
| static PWMInfo pwmInfo; | ||||
| 
 | ||||
| static void frc1_interrupt_handler(void) | ||||
| static void frc1_interrupt_handler(void *arg) | ||||
| { | ||||
|     uint8_t i = 0; | ||||
|     bool out = true; | ||||
|  | @ -97,7 +97,7 @@ void pwm_init(uint8_t npins, const uint8_t* pins) | |||
|     pwm_stop(); | ||||
| 
 | ||||
|     /* set up ISRs */ | ||||
|     _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler); | ||||
|     _xt_isr_attach(INUM_TIMER_FRC1, frc1_interrupt_handler, NULL); | ||||
| 
 | ||||
|     /* Flag not running */ | ||||
|     pwmInfo.running = 0; | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ static SemaphoreHandle_t uart0_sem = NULL; | |||
| static bool inited = false; | ||||
| static void uart0_rx_init(void); | ||||
| 
 | ||||
| IRAM void uart0_rx_handler(void) | ||||
| IRAM void uart0_rx_handler(void *arg) | ||||
| { | ||||
|     // TODO: Handle UART1, see reg 0x3ff20020, bit2, bit0 represents uart1 and uart0 respectively
 | ||||
|     if (!UART(UART0).INT_STATUS & UART_INT_STATUS_RXFIFO_FULL) { | ||||
|  | @ -97,7 +97,7 @@ static void uart0_rx_init(void) | |||
|     int trig_lvl = 1; | ||||
|     uart0_sem = xSemaphoreCreateCounting(UART0_RX_SIZE, 0); | ||||
| 
 | ||||
|     _xt_isr_attach(INUM_UART, uart0_rx_handler); | ||||
|     _xt_isr_attach(INUM_UART, uart0_rx_handler, NULL); | ||||
|     _xt_isr_unmask(1 << INUM_UART); | ||||
| 
 | ||||
|     // reset the rx fifo
 | ||||
|  |  | |||
|  | @ -60,7 +60,7 @@ volatile uint32_t dma_isr_counter = 0; | |||
| 
 | ||||
| static volatile bool i2s_dma_processing = false; | ||||
| 
 | ||||
| static void dma_isr_handler(void) | ||||
| static void dma_isr_handler(void *arg) | ||||
| { | ||||
|     if (i2s_dma_is_eof_interrupt()) { | ||||
| #ifdef WS2812_I2S_DEBUG | ||||
|  | @ -145,7 +145,7 @@ void ws2812_i2s_init(uint32_t pixels_number) | |||
|     debug("i2s clock dividers, bclk=%d, clkm=%d\n", | ||||
|             clock_div.bclk_div, clock_div.clkm_div); | ||||
| 
 | ||||
|     i2s_dma_init(dma_isr_handler, clock_div, i2s_pins); | ||||
|     i2s_dma_init(dma_isr_handler, NULL, clock_div, i2s_pins); | ||||
| } | ||||
| 
 | ||||
| const IRAM_DATA int16_t bitpatterns[16] = | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue