diff --git a/empty.c b/empty.c index 55249a3..cdcde4e 100644 --- a/empty.c +++ b/empty.c @@ -30,18 +30,16 @@ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "ti_msp_dl_config.h" -#include "delay.h" -#include "mt6701.h" -#include "dfoc.h" -#include -#include -#include #include "config.h" +#include "delay.h" +#include "dfoc.h" +#include "mt6701.h" +#include "ti_msp_dl_config.h" #include +#include +#include #include - - +#include extern float angle_f; @@ -49,121 +47,107 @@ extern bool gIsI2cError; const float num_f = 0.123456f; -volatile uint16_t count = 0 ; -volatile float Target = 0; //串口目标值 - - -const int pp = 7; //电机极对数 -const int Dir = -1; //电机编码器方向 +volatile uint16_t count = 0; +volatile float Target = 0; // 串口目标值 +const int pp = 7; // 电机极对数 +const int Dir = 1; // 电机编码器方向 #define UART_PACKET_SIZE (6) /* Data received from UART */ -volatile uint8_t gUartRxPacket[UART_PACKET_SIZE] ={'a','b','c','d','e','f'}; +volatile uint8_t gUartRxPacket[UART_PACKET_SIZE] = {'a', 'b', 'c', + 'd', 'e', 'f'}; volatile bool gCheckUART; - - -void parse_uart_cmd(void) -{ - char num[10]={0}; - int i = 1; - int j = 0; - if(gUartRxPacket[0] == 'T' && gUartRxPacket[UART_PACKET_SIZE-1] == '\n')//数据第一位与数据的最后一位 - { - if(gUartRxPacket[1] != '-')//接受到的数据为正数 - { - while (gUartRxPacket[i] != '\n' && (isdigit(gUartRxPacket[i]) || gUartRxPacket[i] == '.')) {num[j++] = gUartRxPacket[i++];} - Target = atof(num); -// Serial_SendFloatNumber(Target,3,2); - } - else//接收到的数据为负数 - { - i=2; - while (gUartRxPacket[i] != '\n' && (isdigit(gUartRxPacket[i]) || gUartRxPacket[i] == '.')) {num[j++] = gUartRxPacket[i++];} - Target = -(atof(num)); -// Serial_SendFloatNumber(Target,3,2); - } - printf("%s",gUartRxPacket); - } - else - { - printf((char *)"Input format error\n"); - } -} - - - - - -int main(void) -{ - - SYSCFG_DL_init(); - - /* Configure DMA source, destination and size */ - DL_DMA_setSrcAddr(DMA, DMA_CH1_CHAN_ID, (uint32_t)(&UART_0_INST->RXDATA)); - DL_DMA_setDestAddr(DMA, DMA_CH1_CHAN_ID, (uint32_t) &gUartRxPacket[0]); - DL_DMA_setTransferSize(DMA, DMA_CH1_CHAN_ID, UART_PACKET_SIZE); - DL_DMA_enableChannel(DMA, DMA_CH1_CHAN_ID); - - - NVIC_EnableIRQ(UART_0_INST_INT_IRQN); - DL_TimerA_startCounter(PWM_0_INST); - - NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN); - DL_TimerG_startCounter(TIMER_0_INST); - - - FOC_Init(12.6); - DL_SYSTICK_resetValue(); - - while(1) +void parse_uart_cmd(void) { + char num[10] = {0}; + int i = 1; + int j = 0; + if (gUartRxPacket[0] == 'T' && + gUartRxPacket[UART_PACKET_SIZE - 1] == '\n') // 数据第一位与数据的最后一位 + { + if (gUartRxPacket[1] != '-') // 接受到的数据为正数 { - //DL_GPIO_togglePins(LED_PORT, LED_PA0_PIN); - //delay_ms(10); - - //开环 - //velocityopenloop(Target); - //闭环 - //Set_Angle(Target); - if(gCheckUART) - { - gCheckUART = false; - parse_uart_cmd(); - Set_Angle(Target); - } - delay_ms(10); - - - } -} - - -void TIMER_0_INST_IRQHandler(void) -{ - switch(DL_TimerA_getPendingInterrupt(TIMER_0_INST)) + while (gUartRxPacket[i] != '\n' && + (isdigit(gUartRxPacket[i]) || gUartRxPacket[i] == '.')) { + num[j++] = gUartRxPacket[i++]; + } + Target = atof(num); + // Serial_SendFloatNumber(Target,3,2); + } else // 接收到的数据为负数 { - case DL_TIMERG_INTERRUPT_ZERO_EVENT: - - printf("Target is %f \n", Target); - //printf("%s",gUartRxPacket); - DL_GPIO_togglePins(LED_PORT, LED_PA0_PIN); + i = 2; + while (gUartRxPacket[i] != '\n' && + (isdigit(gUartRxPacket[i]) || gUartRxPacket[i] == '.')) { + num[j++] = gUartRxPacket[i++]; + } + Target = -(atof(num)); + // Serial_SendFloatNumber(Target,3,2); + } + printf("%s", gUartRxPacket); + } else { + printf((char *)"Input format error\n"); + } +} - break; - default: - break; +int main(void) { + + SYSCFG_DL_init(); + + /* Configure DMA source, destination and size */ + DL_DMA_setSrcAddr(DMA, DMA_CH1_CHAN_ID, (uint32_t)(&UART_0_INST->RXDATA)); + DL_DMA_setDestAddr(DMA, DMA_CH1_CHAN_ID, (uint32_t)&gUartRxPacket[0]); + DL_DMA_setTransferSize(DMA, DMA_CH1_CHAN_ID, UART_PACKET_SIZE); + DL_DMA_enableChannel(DMA, DMA_CH1_CHAN_ID); + + NVIC_EnableIRQ(UART_0_INST_INT_IRQN); + DL_TimerA_startCounter(PWM_0_INST); + + NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN); + DL_TimerG_startCounter(TIMER_0_INST); + + FOC_Init(12.6); + DL_SYSTICK_resetValue(); + + while (1) { + // DL_GPIO_togglePins(LED_PORT, LED_PA0_PIN); + // delay_ms(10); + + // 开环 + // velocityopenloop(Target); + // 闭环 + Set_Angle(Target); + if (gCheckUART) { + gCheckUART = false; + parse_uart_cmd(); + // Set_Angle(Target); } + delay_ms(10); + } } -void UART_0_INST_IRQHandler(void) -{ - switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) { - case DL_UART_MAIN_IIDX_DMA_DONE_RX: - gCheckUART = true; - break; - default: - break; - } + +void TIMER_0_INST_IRQHandler(void) { + switch (DL_TimerA_getPendingInterrupt(TIMER_0_INST)) { + case DL_TIMERG_INTERRUPT_ZERO_EVENT: + + printf("Target is %f \n", Target); + // printf("%s",gUartRxPacket); + printf("angle is %f \n", angle_f); + DL_GPIO_togglePins(LED_PORT, LED_PA0_PIN); + Target = Target + 1; + break; + default: + break; + } +} +void UART_0_INST_IRQHandler(void) { + switch (DL_UART_Main_getPendingInterrupt(UART_0_INST)) { + case DL_UART_MAIN_IIDX_DMA_DONE_RX: + gCheckUART = true; + break; + default: + break; + } }