Advertisement
hugol

Untitled

Dec 13th, 2015
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.94 KB | None | 0 0
  1. #include <stm32f4xx.h>
  2.  
  3.  
  4.  
  5. //#include "other_stuff.h"
  6. #include "music.h"
  7.  
  8. #define SINE_RES 128
  9.  
  10. #define DAC_DHR12R1_ADDR 0x40007408
  11.  
  12.  
  13. #define TIM_PERIOD 66
  14.  
  15. // 4096 max
  16. const uint16_t function[SINE_RES] = { 2048, 2145, 2242, 2339, 2435, 2530, 2624, 2717, 2808, 2897,
  17. 2984, 3069, 3151, 3230, 3307, 3381, 3451, 3518, 3581, 3640,
  18. 3696, 3748, 3795, 3838, 3877, 3911, 3941, 3966, 3986, 4002,
  19. 4013, 4019, 4020, 4016, 4008, 3995, 3977, 3954, 3926, 3894,
  20. 3858, 3817, 3772, 3722, 3669, 3611, 3550, 3485, 3416, 3344,
  21. 3269, 3191, 3110, 3027, 2941, 2853, 2763, 2671, 2578, 2483,
  22. 2387, 2291, 2194, 2096, 1999, 1901, 1804, 1708, 1612, 1517,
  23. 1424, 1332, 1242, 1154, 1068, 985, 904, 826, 751, 679,
  24. 610, 545, 484, 426, 373, 323, 278, 237, 201, 169,
  25. 141, 118, 100, 87, 79, 75, 76, 82, 93, 109,
  26. 129, 154, 184, 218, 257, 300, 347, 399, 455, 514,
  27. 577, 644, 714, 788, 865, 944, 1026, 1111, 1198, 1287,
  28. 1378, 1471, 1565, 1660, 1756, 1853, 1950, 2047};
  29.  
  30. uint16_t *dataB = data;
  31.  
  32. static void TIM6_Config(void);
  33. static void DAC1_Config(void);
  34.  
  35. int main()
  36. {
  37. int i;
  38. for(i=0; i<sizeof(data)/sizeof(uint16_t); i++){
  39. dataB[i] = dataB[i] * 16;
  40. }
  41. GPIO_InitTypeDef gpio_A;
  42.  
  43. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
  44. RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);
  45. RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1, ENABLE);
  46.  
  47. gpio_A.GPIO_Pin = GPIO_Pin_4;
  48. gpio_A.GPIO_Mode = GPIO_Mode_AN;
  49. gpio_A.GPIO_PuPd = GPIO_PuPd_NOPULL;
  50. GPIO_Init(GPIOA, &gpio_A);
  51.  
  52. TIM6_Config();
  53. DAC1_Config();
  54.  
  55.  
  56. while (1)
  57. {
  58.  
  59. }
  60.  
  61. }
  62.  
  63. static void TIM6_Config(void)
  64. {
  65. TIM_TimeBaseInitTypeDef TIM6_TimeBase;
  66.  
  67. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);
  68.  
  69. TIM_TimeBaseStructInit(&TIM6_TimeBase);
  70. TIM6_TimeBase.TIM_Period = (uint16_t)TIM_PERIOD;
  71. // TIM6_TimeBase.TIM_Prescaler = 161; // 62 Hz
  72. TIM6_TimeBase.TIM_Prescaler = 161; // 62 Hz
  73. TIM6_TimeBase.TIM_ClockDivision = 0;
  74. TIM6_TimeBase.TIM_CounterMode = TIM_CounterMode_Up;
  75. TIM_TimeBaseInit(TIM6, &TIM6_TimeBase);
  76. TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);
  77.  
  78. TIM_Cmd(TIM6, ENABLE);
  79. }
  80.  
  81. static void DAC1_Config(void)
  82. {
  83. DAC_InitTypeDef DAC_INIT;
  84. DMA_InitTypeDef DMA_INIT;
  85.  
  86. DAC_INIT.DAC_Trigger = DAC_Trigger_T6_TRGO;
  87. DAC_INIT.DAC_WaveGeneration = DAC_WaveGeneration_None;
  88. DAC_INIT.DAC_OutputBuffer = DAC_OutputBuffer_Enable;
  89. DAC_Init(DAC_Channel_1, &DAC_INIT);
  90.  
  91. DMA_DeInit(DMA1_Stream5);
  92. DMA_INIT.DMA_Channel = DMA_Channel_7;
  93. DMA_INIT.DMA_PeripheralBaseAddr = (uint32_t)DAC_DHR12R1_ADDR;
  94.  
  95. DMA_INIT.DMA_Memory0BaseAddr = (uint32_t)data;
  96.  
  97. DMA_INIT.DMA_DIR = DMA_DIR_MemoryToPeripheral;
  98.  
  99. DMA_INIT.DMA_BufferSize = sizeof(data)/sizeof(uint16_t);
  100.  
  101. DMA_INIT.DMA_PeripheralInc = DMA_PeripheralInc_Disable;
  102. DMA_INIT.DMA_MemoryInc = DMA_MemoryInc_Enable;
  103. DMA_INIT.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;
  104. DMA_INIT.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;
  105. DMA_INIT.DMA_Mode = DMA_Mode_Circular;
  106. DMA_INIT.DMA_Priority = DMA_Priority_High;
  107. DMA_INIT.DMA_FIFOMode = DMA_FIFOMode_Disable;
  108. DMA_INIT.DMA_FIFOThreshold = DMA_FIFOThreshold_HalfFull;
  109. DMA_INIT.DMA_MemoryBurst = DMA_MemoryBurst_Single;
  110. DMA_INIT.DMA_PeripheralBurst = DMA_PeripheralBurst_Single;
  111. DMA_Init(DMA1_Stream5, &DMA_INIT);
  112.  
  113. DMA_Cmd(DMA1_Stream5, ENABLE);
  114. DAC_Cmd(DAC_Channel_1, ENABLE);
  115. DAC_DMACmd(DAC_Channel_1, ENABLE);
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement