Professional Documents
Culture Documents
TP3 - FFT en C Con MXUXpresso
TP3 - FFT en C Con MXUXpresso
h>
#include <stdio.h>
#include "board.h"
#include "peripherals.h"
#include "pin_mux.h"
#include "clock_config.h"
#include "MK64F12.h"
#include "fsl_debug_console.h"
#include "fsl_device_registers.h"
#include "fsl_uart.h"
#include "fsl_adc16.h"
#include "arm_math.h"
q15_t buffer[BUFFER_SIZE];
uint16_t DC_OFFSET = 2048;
q15_t input_buffer[BUFFER_SIZE];
q15_t output_buffer[BUFFER_SIZE];
float32_t fft_buffer[BUFFER_SIZE / 2];
uint32_t sample_rate = 8000;
uint16_t buffer_size = BUFFER_SIZE;
//bool fft_enabled = false;
/*
* @brief Application entry point.
*/
int main(void) {
BOARD_InitBootPins();
BOARD_InitBootClocks();
BOARD_InitBootPeripherals();
BOARD_InitLEDsPins();
BOARD_InitButtonsPins();
BOARD_InitPeripherals();
#ifndef BOARD_INIT_DEBUG_CONSOLE_PERIPHERAL
BOARD_InitDebugConsole();
#endif
uart_config_t config;
UART_GetDefaultConfig(&config);
config.baudRate_Bps = 115200;
UART_Init(UART0, &config, CLOCK_GetFreq(kCLOCK_CoreSysClk));
while(1)
{
for (int i = 0; i < BUFFER_SIZE; i++)
{
// env�a "Resultado:" seguido del valor de la variable y un salto de
l�nea
char buffer_string[10];
sprintf(buffer_string, "%d\n", buffer[i]);
UART_WriteBlocking(UART0, (uint8_t *)buffer_string,
strlen(buffer_string));
SDK_DelayAtLeastUs(1000, SystemCoreClock);
}
}
return 0 ;
}
//---------------------------------------------------------------------------------
-----------------------------------------------------------
velMuestreo++;
if (velMuestreo == 5)
{
velMuestreo = 0;
}
switch(velMuestreo){
case 0:
GPIO_PortClear(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_PIN);
GPIO_PortSet(BOARD_LED_GREEN_GPIO,1u << BOARD_LED_GREEN_PIN);
GPIO_PortSet(BOARD_LED_BLUE_GPIO, 1u << BOARD_LED_BLUE_PIN);
PIT_StopTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_SetTimerPeriod(PIT_PERIPHERAL, PIT_CHANNEL_0, _8KHZ_SR);
PIT_StartTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
break;
case 1:
GPIO_PortSet(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_PIN);
GPIO_PortClear(BOARD_LED_GREEN_GPIO,1u << BOARD_LED_GREEN_PIN);
GPIO_PortSet(BOARD_LED_BLUE_GPIO, 1u << BOARD_LED_BLUE_PIN);
PIT_StopTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_SetTimerPeriod(PIT_PERIPHERAL, PIT_CHANNEL_0, _16KHZ_SR);
PIT_StartTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
break;
case 2:
GPIO_PortSet(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_PIN);
GPIO_PortSet(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_PIN);
GPIO_PortClear(BOARD_LED_BLUE_GPIO,1u << BOARD_LED_BLUE_PIN);
PIT_StopTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_SetTimerPeriod(PIT_PERIPHERAL, PIT_CHANNEL_0, _22KHZ_SR);
PIT_StartTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
break;
case 3:
GPIO_PortClear(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_PIN);
GPIO_PortClear(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_PIN);
GPIO_PortClear(BOARD_LED_BLUE_GPIO,1u << BOARD_LED_BLUE_PIN);
PIT_StopTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_SetTimerPeriod(PIT_PERIPHERAL, PIT_CHANNEL_0, _44KHZ_SR);
PIT_StartTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
break;
case 4:
GPIO_PortClear(BOARD_LED_RED_GPIO, 1u << BOARD_LED_RED_PIN);
GPIO_PortClear(BOARD_LED_GREEN_GPIO, 1u << BOARD_LED_GREEN_PIN);
GPIO_PortSet(BOARD_LED_BLUE_GPIO,1u << BOARD_LED_BLUE_PIN);
PIT_StopTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_SetTimerPeriod(PIT_PERIPHERAL, PIT_CHANNEL_0, _48KHZ_SR);
PIT_StartTimer(PIT_PERIPHERAL, PIT_CHANNEL_0);
break;
}
void GPIOC_IRQHANDLER(void){
uint32_t pin_flags = GPIO_PortGetInterruptFlags(GPIOC); // Get pin flags
// Place your interrupt code here
if(!transformada)
{
transformada = true;
}
else
{
transformada = false;
}
GPIO_PortClearInterruptFlags(GPIOC, pin_flags);
//---------------------------------------------------------------------------------
-----------------------------------------------------------
void PIT_CHANNEL_0_IRQHANDLER(void) {
uint32_t intStatus;
/* Reading all interrupt flags of status register */
intStatus = PIT_GetStatusFlags(PIT_PERIPHERAL, PIT_CHANNEL_0);
PIT_ClearStatusFlags(PIT_PERIPHERAL, PIT_CHANNEL_0, intStatus);
ADC16_SetChannelConfig(ADC1, 0 , &ADC1_channelsConfig);
//---------------------------------------------------------------------------------
-----------------------------------------------------------
DAC_SetBufferValue(DAC0_PERIPHERAL, 0, (valueAdc+DC_OFFSET));
indiceBuffer ++;
if(indiceBuffer>=512)
{
indiceBuffer = 0;
}
//adcValue = result_values[0];
//AdcReady = 1;// flag