85 lines
1.9 KiB
C
85 lines
1.9 KiB
C
|
|
#include "mx_spi.h"
|
|||
|
|
#include "bsp_spi.h"
|
|||
|
|
#include "string.h"
|
|||
|
|
mx_spi_frame_struct mx_spi_frame = {0};
|
|||
|
|
|
|||
|
|
|
|||
|
|
static uint16_t CalChecksum(uint8_t * data, uint16_t len)
|
|||
|
|
{
|
|||
|
|
uint16_t sum = 0;
|
|||
|
|
for(int i = 0; i < len; ++i)
|
|||
|
|
{
|
|||
|
|
sum += data[i];
|
|||
|
|
}
|
|||
|
|
return sum;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
uint8_t creat_mx_spi_frame(uint8_t device_id, uint8_t message_type, uint8_t error_flag, uint8_t *data, uint16_t data_len, mx_spi_frame_struct * mx_spi_out_frame)
|
|||
|
|
{
|
|||
|
|
if(data_len != sizeof(mx_spi_out_frame->data))
|
|||
|
|
{
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
else
|
|||
|
|
{
|
|||
|
|
mx_spi_out_frame->device_id = device_id;
|
|||
|
|
mx_spi_out_frame->message_type = message_type;
|
|||
|
|
mx_spi_out_frame->error_flag = error_flag;
|
|||
|
|
memcpy(mx_spi_out_frame->data,data,data_len);
|
|||
|
|
mx_spi_out_frame->check_sum = CalChecksum((uint8_t *)mx_spi_out_frame,sizeof(mx_spi_frame_struct)-1);
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void mx_spi_init(void)
|
|||
|
|
{
|
|||
|
|
spi1_init((uint8_t *)&mx_spi_frame, sizeof(mx_spi_frame));
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
void update_spi_data(uint8_t *sensor_data,uint16_t sensor_data_len)
|
|||
|
|
{
|
|||
|
|
static mx_spi_frame_struct mx_spi_frame_temp = {0};
|
|||
|
|
|
|||
|
|
creat_mx_spi_frame(0x01,0x01,0x00,sensor_data,sensor_data_len,&mx_spi_frame_temp);
|
|||
|
|
if(spi_i2s_flag_get(SPI1,SPI_I2S_BF_FLAG) == RESET)
|
|||
|
|
{
|
|||
|
|
if(SPI_SLAVE_CS_READ() == SET)
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
memcpy((uint8_t *)&mx_spi_frame,(uint8_t *)&mx_spi_frame_temp,sizeof(mx_spi_frame_struct));
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//ˢ<>±<EFBFBD>־
|
|||
|
|
void updata_spi_dma(void)
|
|||
|
|
{
|
|||
|
|
static uint8_t busy = 0;
|
|||
|
|
|
|||
|
|
if(spi_i2s_flag_get(SPI1,SPI_I2S_BF_FLAG) == RESET && SPI_SLAVE_CS_READ() == SET)
|
|||
|
|
{
|
|||
|
|
if(busy)
|
|||
|
|
{
|
|||
|
|
//mx_spi_init();
|
|||
|
|
busy = 0;
|
|||
|
|
dma_channel_enable(DMA2_CHANNEL1, FALSE);
|
|||
|
|
spi_enable(SPI1, FALSE);
|
|||
|
|
spi_enable(SPI1, TRUE);
|
|||
|
|
dma_data_number_set(DMA2_CHANNEL1, sizeof(mx_spi_frame));
|
|||
|
|
dma_channel_enable(DMA2_CHANNEL1, TRUE);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if(spi_i2s_flag_get(SPI1,SPI_I2S_BF_FLAG) == SET && SPI_SLAVE_CS_READ() == RESET)
|
|||
|
|
{
|
|||
|
|
busy = 1;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|