Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2021
440
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.86 KB | None | 0 0
  1. /*
  2.  * I2S_FACTORY.c
  3.  *
  4.  *  Created on: Apr 22, 2021
  5.  *      Author: Christopher
  6.  */
  7.  
  8. #include <CONSTANTS.h>
  9.  
  10. #include "stm32h753xx.h"
  11. #include "Opcode.h"
  12.  
  13. static int I2S1_TxBUFF[4];
  14. static int I2S1_RxBUFF[4];
  15.  
  16. int * getI2S1_TxBUFF() {
  17.  
  18.     return I2S1_TxBUFF;
  19. }
  20.  
  21. int * getI2S1_RxBUFF() {
  22.  
  23.     return I2S1_RxBUFF;
  24. }
  25.  
  26. void SET_I2S_GPIO () {
  27.  
  28. // ! ---- PINS USED
  29. // PA4 = I2S1_WS
  30. // PA5 = I2S1_CK
  31. // PA6 = MISO
  32. // PA7 = MOSI
  33. // PC4 = MCK
  34.  
  35. // GPIOA & C Clock
  36. RCC->AHB4ENR &= ~((RCC_AHB4ENR_GPIOAEN) |
  37.                   (RCC_AHB4ENR_GPIOCEN));
  38.  
  39. RCC->AHB4ENR |= (RCC_AHB4ENR_GPIOAEN) |
  40.                 (RCC_AHB4ENR_GPIOCEN);
  41.  
  42.  
  43. GPIOA->MODER &= ~((GPIO_MODER_MODE4) |
  44.                   (GPIO_MODER_MODE5) |
  45.                   (GPIO_MODER_MODE6) |
  46.                   (GPIO_MODER_MODE7));
  47.  
  48. GPIOA->MODER |= (GPIO_MODER_MODE4_AF) |
  49.                 (GPIO_MODER_MODE5_AF) |
  50.                 (GPIO_MODER_MODE6_AF) |
  51.                 (GPIO_MODER_MODE7_AF);
  52.  
  53. GPIOC->MODER &= ~(GPIO_MODER_MODE4);
  54. GPIOC->MODER |=  (GPIO_MODER_MODE4_AF);
  55.  
  56.  
  57. GPIOA->OSPEEDR &= ~((GPIO_OSPEEDR_OSPEED4) |
  58.                     (GPIO_OSPEEDR_OSPEED5) |
  59.                     (GPIO_OSPEEDR_OSPEED6) |
  60.                     (GPIO_OSPEEDR_OSPEED7));
  61.  
  62. GPIOA->OSPEEDR |=   (GPIO_OSPEEDR_OSPEED4_VERY_HIGH_SPEED) |
  63.                     (GPIO_OSPEEDR_OSPEED5_VERY_HIGH_SPEED) |
  64.                     (GPIO_OSPEEDR_OSPEED6_VERY_HIGH_SPEED) |
  65.                     (GPIO_OSPEEDR_OSPEED7_VERY_HIGH_SPEED);
  66.  
  67. GPIOC->OSPEEDR &= ~((GPIO_OSPEEDR_OSPEED4));
  68. GPIOC->OSPEEDR |=   (GPIO_OSPEEDR_OSPEED4_VERY_HIGH_SPEED);
  69.  
  70. GPIOA->AFR[0] &= ~((GPIO_AFRL_AFSEL4) |
  71.                    (GPIO_AFRL_AFSEL5) |
  72.                    (GPIO_AFRL_AFSEL6) |
  73.                    (GPIO_AFRL_AFSEL7));
  74.  
  75. GPIOA->AFR[0] |=   (GPIO_AFRL_AFSEL4_I2S1_WS)   |
  76.                    (GPIO_AFRL_AFSEL5_I2S1_CK)   |
  77.                    (GPIO_AFRL_AFSEL6_I2S1_MISO) |
  78.                    (GPIO_AFRL_AFSEL7_I2S1_MOSI);
  79.  
  80. GPIOC->AFR[0] &= ~(GPIO_AFRL_AFSEL4);
  81. GPIOC->AFR[0] |=  (GPIO_AFRL_AFSEL4_I2S1_MCK);
  82.  
  83. }
  84.  
  85.  
  86. void SET_I2S_DMA() {
  87.  
  88. // ENABLE DMA
  89. RCC->AHB1ENR &= ~(RCC_AHB1ENR_DMA1EN);
  90. RCC->AHB1ENR |= RCC_AHB1ENR_DMA1EN;
  91.  
  92. //Setup DMA
  93. DMAMUX1_Channel0->CCR &= ~(DMAMUX_CxCR_DMAREQ_ID);
  94. DMAMUX1_Channel0->CCR |=  (DMAMUX_CxCR_DMAREQ_ID_I2S1_Rx);
  95.  
  96. DMAMUX1_Channel1->CCR &= ~(DMAMUX_CxCR_DMAREQ_ID);
  97. DMAMUX1_Channel1->CCR |=  (DMAMUX_CxCR_DMAREQ_ID_I2S1_Tx);
  98.  
  99. DMA1_Stream0->CR &= ~((DMA_SxCR_CT)    |
  100.                       (DMA_SxCR_PL)    |
  101.                       (DMA_SxCR_MSIZE) |
  102.                       (DMA_SxCR_PSIZE) |
  103.                       (DMA_SxCR_MINC)  |
  104.                       (DMA_SxCR_CIRC)  |
  105.                       (DMA_SxCR_DIR)   |
  106.                       (DMA_SxCR_PFCTRL)|
  107.                       (DMA_SxCR_TCIE)  |
  108.                       (DMA_SxCR_HTIE));
  109.  
  110. DMA1_Stream0->CR |=   (DMA_SxCR_CT_MEM0)           |
  111.                       (DMA_SxCR_PL_VERY_HIGH)      |
  112.                       (DMA_SxCR_MSIZE_32BIT)       |
  113.                       (DMA_SxCR_PSIZE_32BIT)       |
  114.                       (DMA_SxCR_MINC)              |
  115.                       (DMA_SxCR_CIRC)              |
  116.                       (DMA_SxCR_DIR_PERI_TO_MEM)   |
  117.                       (DMA_SxCR_PFCTRL_DMA_FLOW)   |
  118.                       (DMA_SxCR_TCIE)              |
  119.                       (DMA_SxCR_HTIE);
  120.  
  121. DMA1_Stream1->CR &= ~((DMA_SxCR_CT)    |
  122.                       (DMA_SxCR_PL)    |
  123.                       (DMA_SxCR_MSIZE) |
  124.                       (DMA_SxCR_PSIZE) |
  125.                       (DMA_SxCR_MINC)  |
  126.                       (DMA_SxCR_CIRC)  |
  127.                       (DMA_SxCR_DIR)   |
  128.                       (DMA_SxCR_PFCTRL)|
  129.                       (DMA_SxCR_TCIE)  |
  130.                       (DMA_SxCR_HTIE));
  131.  
  132. DMA1_Stream1->CR |=   (DMA_SxCR_CT_MEM0)           |
  133.                       (DMA_SxCR_PL_VERY_HIGH)      |
  134.                       (DMA_SxCR_MSIZE_32BIT)       |
  135.                       (DMA_SxCR_PSIZE_32BIT)       |
  136.                       (DMA_SxCR_MINC)              |
  137.                       //(DMA_SxCR_CIRC)              |
  138.                       (DMA_SxCR_DIR_MEM_TO_PERI)   |
  139.                       (DMA_SxCR_PFCTRL_DMA_FLOW);
  140.  
  141. DMA1_Stream0->NDTR = 4;
  142. DMA1_Stream1->NDTR = 4;
  143.  
  144. DMA1_Stream0->PAR = (int)&SPI1->RXDR;
  145. DMA1_Stream0->M0AR = (int)I2S1_RxBUFF;
  146.  
  147. DMA1_Stream1->PAR = (int)&SPI1->TXDR;
  148. DMA1_Stream1->M0AR = (int)I2S1_TxBUFF;
  149. }
  150.  
  151. void SET_I2S_INTERRUPT () {
  152.     NVIC_SetPriority(DMA1_Stream0_IRQn,0);
  153.     NVIC_EnableIRQ(DMA1_Stream0_IRQn);
  154. }
  155.  
  156. void INIT_I2S () {
  157.  
  158. SET_I2S_GPIO();
  159. SET_I2S_DMA();
  160. }
  161.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement