massaging makefile
This commit is contained in:
@@ -7,7 +7,6 @@
|
||||
#include "Setup.h"
|
||||
#include "TipThermoModel.h"
|
||||
#include "configuration.h"
|
||||
#include "gd32vf103_timer.h"
|
||||
#include "history.hpp"
|
||||
#include "main.hpp"
|
||||
|
||||
@@ -17,7 +16,9 @@ const uint8_t tempMeasureTicks = 14;
|
||||
|
||||
uint16_t totalPWM; // Total length of the cycle's ticks
|
||||
|
||||
void resetWatchdog() { fwdgt_counter_reload(); }
|
||||
void resetWatchdog() {
|
||||
//#TODO
|
||||
}
|
||||
|
||||
uint16_t getHandleTemperature(uint8_t sample) {
|
||||
#ifdef TEMP_TMP36
|
||||
@@ -36,9 +37,10 @@ uint16_t getHandleTemperature(uint8_t sample) {
|
||||
result /= 993;
|
||||
return result;
|
||||
#else
|
||||
#error Pinecil only uses TMP36
|
||||
#error only uses TMP36
|
||||
#endif
|
||||
}
|
||||
|
||||
uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
|
||||
uint32_t res = getADCVin(sample);
|
||||
res *= 4;
|
||||
@@ -48,36 +50,48 @@ uint16_t getInputVoltageX10(uint16_t divisor, uint8_t sample) {
|
||||
|
||||
void unstick_I2C() {
|
||||
/* configure SDA/SCL for GPIO */
|
||||
GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin;
|
||||
gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);
|
||||
for (int i = 0; i < 8; i++) {
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
GPIO_BOP(GPIOB) |= SCL_Pin;
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
asm("nop");
|
||||
GPIO_BOP(GPIOB) &= SCL_Pin;
|
||||
}
|
||||
/* connect PB6 to I2C0_SCL */
|
||||
/* connect PB7 to I2C0_SDA */
|
||||
gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);
|
||||
// GPIO_BC(GPIOB) |= SDA_Pin | SCL_Pin;
|
||||
// gpio_init(SDA_GPIO_Port, GPIO_MODE_OUT_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);
|
||||
// for (int i = 0; i < 8; i++) {
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// GPIO_BOP(GPIOB) |= SCL_Pin;
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// asm("nop");
|
||||
// GPIO_BOP(GPIOB) &= SCL_Pin;
|
||||
// }
|
||||
// /* connect PB6 to I2C0_SCL */
|
||||
// /* connect PB7 to I2C0_SDA */
|
||||
// gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin | SCL_Pin);
|
||||
}
|
||||
|
||||
uint8_t getButtonA() { return (gpio_input_bit_get(KEY_A_GPIO_Port, KEY_A_Pin) == SET) ? 1 : 0; }
|
||||
uint8_t getButtonB() { return (gpio_input_bit_get(KEY_B_GPIO_Port, KEY_B_Pin) == SET) ? 1 : 0; }
|
||||
uint8_t getButtonA() {
|
||||
//#TODO
|
||||
return false;
|
||||
// return (gpio_input_bit_get(KEY_A_GPIO_Port, KEY_A_Pin) == SET) ? 1 : 0;
|
||||
}
|
||||
uint8_t getButtonB() {
|
||||
//#TODO
|
||||
return false;
|
||||
// return (gpio_input_bit_get(KEY_B_GPIO_Port, KEY_B_Pin) == SET) ? 1 : 0;
|
||||
}
|
||||
|
||||
void reboot() {
|
||||
// Spin for watchdog
|
||||
for (;;) {}
|
||||
}
|
||||
|
||||
void delay_ms(uint16_t count) { delay_1ms(count); }
|
||||
void delay_ms(uint16_t count) {
|
||||
// delay_1ms(count);
|
||||
//#TODO
|
||||
}
|
||||
|
||||
uint32_t __get_IPSR(void) {
|
||||
return 0; // To shut-up CMSIS
|
||||
}
|
||||
@@ -89,4 +103,6 @@ bool isTipDisconnected() {
|
||||
return tipTemp > tipDisconnectedThres;
|
||||
}
|
||||
|
||||
void setStatusLED(const enum StatusLED state) {}
|
||||
void setStatusLED(const enum StatusLED state) {
|
||||
// Dont have one
|
||||
}
|
||||
|
||||
@@ -24,38 +24,16 @@ void log_system_state(int32_t PWMWattsx10) {
|
||||
// 3+1+3+1+3+1+3+1+5+2 = 23, so sizing at 32 for now
|
||||
|
||||
outputLength = snprintf(uartOutputBuffer, uartOutputBufferLength, "%lu,%u,%li,%u,%lu\r\n", //
|
||||
TipThermoModel::getTipInC(false), // Tip temp in C
|
||||
getHandleTemperature(0), // Handle temp in C X10
|
||||
PWMWattsx10, // Output Wattage
|
||||
pendingPWM, // PWM
|
||||
TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true) // Tip temp in uV
|
||||
);
|
||||
TipThermoModel::getTipInC(false), // Tip temp in C
|
||||
getHandleTemperature(0), // Handle temp in C X10
|
||||
PWMWattsx10, // Output Wattage
|
||||
pendingPWM, // PWM
|
||||
TipThermoModel::convertTipRawADCTouV(getTipRawTemp(0), true) // Tip temp in uV
|
||||
);
|
||||
|
||||
// Now print this out the uart via IRQ (DMA cant be used as oled has it)
|
||||
currentOutputPos = 0;
|
||||
/* enable USART1 Transmit Buffer Empty interrupt */
|
||||
usart_interrupt_enable(UART_PERIF, USART_INT_TBE);
|
||||
}
|
||||
}
|
||||
ssize_t _write(int fd, const void *ptr, size_t len) {
|
||||
if (len > uartOutputBufferLength) {
|
||||
len = uartOutputBufferLength;
|
||||
}
|
||||
outputLength = len;
|
||||
currentOutputPos = 0;
|
||||
memcpy(uartOutputBuffer, ptr, len);
|
||||
/* enable USART1 Transmit Buffer Empty interrupt */
|
||||
usart_interrupt_enable(UART_PERIF, USART_INT_TBE);
|
||||
delay_ms(1);
|
||||
return len;
|
||||
}
|
||||
void USART1_IRQHandler(void) {
|
||||
if (RESET != usart_interrupt_flag_get(UART_PERIF, USART_INT_FLAG_TBE)) {
|
||||
/* write one byte to the transmit data register */
|
||||
usart_data_transmit(UART_PERIF, uartOutputBuffer[currentOutputPos++]);
|
||||
if (currentOutputPos >= outputLength) {
|
||||
currentOutputPos = 0xFF; // Mark done
|
||||
usart_interrupt_disable(UART_PERIF, USART_INT_TBE);
|
||||
}
|
||||
// usart_interrupt_enable(UART_PERIF, USART_INT_TBE);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#ifndef FREERTOS_CONFIG_H
|
||||
#define FREERTOS_CONFIG_H
|
||||
#include "nuclei_sdk_soc.h"
|
||||
#include <stdint.h>
|
||||
#define configUSE_PREEMPTION 1
|
||||
#define configUSE_PORT_OPTIMISED_TASK_SELECTION 0
|
||||
|
||||
@@ -24,280 +24,10 @@ uint8_t FRToSI2C::I2C_RegisterRead(uint8_t add, uint8_t reg) {
|
||||
return temp;
|
||||
}
|
||||
|
||||
enum class i2c_step {
|
||||
// Write+read steps
|
||||
Write_start, // Sending start on bus
|
||||
Write_device_address, // start sent, send device address
|
||||
Write_device_memory_address, // device address sent, write the memory location
|
||||
Write_device_data_start, // Write all of the remaining data using DMA
|
||||
Write_device_data_finish, // Write all of the remaining data using DMA
|
||||
|
||||
Read_start, // second read
|
||||
Read_device_address, // Send device address again for the read
|
||||
Read_device_data_start, // read device data via DMA
|
||||
Read_device_data_finish, // read device data via DMA
|
||||
Send_stop, // send the stop at the end of the transaction
|
||||
Wait_stop, // Wait for stop to send and we are done
|
||||
Done, // Finished
|
||||
Error_occured, // Error occured on the bus
|
||||
|
||||
};
|
||||
struct i2c_state {
|
||||
i2c_step currentStep;
|
||||
bool isMemoryWrite;
|
||||
bool wakePart;
|
||||
uint8_t deviceAddress;
|
||||
uint8_t memoryAddress;
|
||||
uint8_t * buffer;
|
||||
uint16_t numberOfBytes;
|
||||
dma_parameter_struct dma_init_struct;
|
||||
};
|
||||
i2c_state currentState;
|
||||
|
||||
void perform_i2c_step() {
|
||||
// Performs next step of the i2c state machine
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_AERR)) {
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_AERR);
|
||||
// Arb error - we lost the bus / nacked
|
||||
currentState.currentStep = i2c_step::Error_occured;
|
||||
}
|
||||
switch (currentState.currentStep) {
|
||||
case i2c_step::Error_occured:
|
||||
i2c_stop_on_bus(I2C0);
|
||||
break;
|
||||
case i2c_step::Write_start:
|
||||
|
||||
/* enable acknowledge */
|
||||
i2c_ack_config(I2C0, I2C_ACK_ENABLE);
|
||||
/* i2c master sends start signal only when the bus is idle */
|
||||
if (!i2c_flag_get(I2C0, I2C_FLAG_I2CBSY)) {
|
||||
/* send the start signal */
|
||||
i2c_start_on_bus(I2C0);
|
||||
currentState.currentStep = i2c_step::Write_device_address;
|
||||
}
|
||||
break;
|
||||
|
||||
case i2c_step::Write_device_address:
|
||||
/* i2c master sends START signal successfully */
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND); // Clear sbsend by reading ctrl banks
|
||||
i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_TRANSMITTER);
|
||||
currentState.currentStep = i2c_step::Write_device_memory_address;
|
||||
}
|
||||
break;
|
||||
case i2c_step::Write_device_memory_address:
|
||||
// Send the device memory location
|
||||
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
|
||||
if (currentState.wakePart) {
|
||||
// We are stopping here
|
||||
currentState.currentStep = i2c_step::Send_stop;
|
||||
return;
|
||||
}
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_BTC);
|
||||
// Write out the 8 byte address
|
||||
i2c_data_transmit(I2C0, currentState.memoryAddress);
|
||||
if (currentState.isMemoryWrite) {
|
||||
currentState.currentStep = i2c_step::Write_device_data_start;
|
||||
} else {
|
||||
currentState.currentStep = i2c_step::Read_start;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case i2c_step::Write_device_data_start:
|
||||
/* wait until the transmission data register is empty */
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
|
||||
dma_deinit(DMA0, DMA_CH5);
|
||||
dma_init(DMA0, DMA_CH5, ¤tState.dma_init_struct);
|
||||
i2c_dma_last_transfer_config(I2C0, I2C_DMALST_ON);
|
||||
dma_circulation_disable(DMA0, DMA_CH5);
|
||||
/* enable I2C0 DMA */
|
||||
i2c_dma_enable(I2C0, I2C_DMA_ON);
|
||||
/* enable DMA0 channel5 */
|
||||
dma_channel_enable(DMA0, DMA_CH5);
|
||||
currentState.currentStep = i2c_step::Write_device_data_finish;
|
||||
}
|
||||
break;
|
||||
|
||||
case i2c_step::Write_device_data_finish: // Wait for complete then goto stop
|
||||
/* wait until BTC bit is set */
|
||||
if (dma_flag_get(DMA0, DMA_CH5, DMA_FLAG_FTF)) {
|
||||
/* wait until BTC bit is set */
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
|
||||
currentState.currentStep = i2c_step::Send_stop;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case i2c_step::Read_start:
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_BTC)) {
|
||||
/* wait until BTC bit is set */
|
||||
i2c_start_on_bus(I2C0);
|
||||
currentState.currentStep = i2c_step::Read_device_address;
|
||||
}
|
||||
break;
|
||||
case i2c_step::Read_device_address:
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_SBSEND)) {
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
if (currentState.numberOfBytes == 1) {
|
||||
/* disable acknowledge */
|
||||
i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {}
|
||||
i2c_ack_config(I2C0, I2C_ACK_DISABLE);
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
/* wait for the byte to be received */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {}
|
||||
/* read the byte received from the EEPROM */
|
||||
*currentState.buffer = i2c_data_receive(I2C0);
|
||||
while (i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {
|
||||
i2c_data_receive(I2C0);
|
||||
}
|
||||
i2c_stop_on_bus(I2C0);
|
||||
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP)) {
|
||||
asm("nop");
|
||||
}
|
||||
currentState.currentStep = i2c_step::Done;
|
||||
} else if (currentState.numberOfBytes == 2) {
|
||||
/* disable acknowledge */
|
||||
i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) {}
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
/* wait for the byte to be received */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {}
|
||||
i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);
|
||||
i2c_ack_config(I2C0, I2C_ACK_DISABLE);
|
||||
|
||||
/* read the byte received from the EEPROM */
|
||||
*currentState.buffer = i2c_data_receive(I2C0);
|
||||
currentState.buffer++;
|
||||
|
||||
/* wait for the byte to be received */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {}
|
||||
/* read the byte received from the EEPROM */
|
||||
*currentState.buffer = i2c_data_receive(I2C0);
|
||||
while (i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {
|
||||
i2c_data_receive(I2C0);
|
||||
}
|
||||
i2c_stop_on_bus(I2C0);
|
||||
while ((I2C_CTL0(I2C0) & I2C_CTL0_STOP)) {
|
||||
asm("nop");
|
||||
}
|
||||
currentState.currentStep = i2c_step::Done;
|
||||
} else {
|
||||
i2c_master_addressing(I2C0, currentState.deviceAddress, I2C_RECEIVER);
|
||||
currentState.currentStep = i2c_step::Read_device_data_start;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case i2c_step::Read_device_data_start:
|
||||
if (i2c_flag_get(I2C0, I2C_FLAG_ADDSEND)) { // addr sent
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
/* one byte master reception procedure (polling) */
|
||||
if (currentState.numberOfBytes == 0) {
|
||||
currentState.currentStep = i2c_step::Send_stop;
|
||||
} else { /* more than one byte master reception procedure (DMA) */
|
||||
|
||||
while (currentState.numberOfBytes) {
|
||||
|
||||
if (3 == currentState.numberOfBytes) {
|
||||
/* wait until BTC bit is set */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_BTC)) {}
|
||||
i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);
|
||||
/* disable acknowledge */
|
||||
i2c_ack_config(I2C0, I2C_ACK_DISABLE);
|
||||
} else if (2 == currentState.numberOfBytes) {
|
||||
/* wait until BTC bit is set */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_BTC)) {}
|
||||
/* disable acknowledge */
|
||||
i2c_ack_config(I2C0, I2C_ACK_DISABLE);
|
||||
/* send a stop condition to I2C bus */
|
||||
i2c_stop_on_bus(I2C0);
|
||||
}
|
||||
/* wait until RBNE bit is set */
|
||||
while (!i2c_flag_get(I2C0, I2C_FLAG_RBNE)) {}
|
||||
/* read a byte from the EEPROM */
|
||||
*currentState.buffer = i2c_data_receive(I2C0);
|
||||
|
||||
/* point to the next location where the byte read will be saved */
|
||||
currentState.buffer++;
|
||||
|
||||
/* decrement the read bytes counter */
|
||||
currentState.numberOfBytes--;
|
||||
}
|
||||
currentState.currentStep = i2c_step::Wait_stop;
|
||||
// currentState.currentStep = i2c_step::Read_device_data_finish;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case i2c_step::Read_device_data_finish: // Wait for complete then goto stop
|
||||
/* wait until BTC bit is set */
|
||||
|
||||
break;
|
||||
case i2c_step::Send_stop:
|
||||
/* send a stop condition to I2C bus*/
|
||||
i2c_stop_on_bus(I2C0);
|
||||
currentState.currentStep = i2c_step::Wait_stop;
|
||||
break;
|
||||
case i2c_step::Wait_stop:
|
||||
/* i2c master sends STOP signal successfully */
|
||||
if ((I2C_CTL0(I2C0) & I2C_CTL0_STOP) != I2C_CTL0_STOP) {
|
||||
currentState.currentStep = i2c_step::Done;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// If we get here something is amiss
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bool perform_i2c_transaction(uint16_t DevAddress, uint16_t memory_address, uint8_t *p_buffer, uint16_t number_of_byte, bool isWrite, bool isWakeOnly) {
|
||||
|
||||
currentState.isMemoryWrite = isWrite;
|
||||
currentState.wakePart = isWakeOnly;
|
||||
currentState.deviceAddress = DevAddress;
|
||||
currentState.memoryAddress = memory_address;
|
||||
currentState.numberOfBytes = number_of_byte;
|
||||
currentState.buffer = p_buffer;
|
||||
// Setup DMA
|
||||
currentState.dma_init_struct.memory_width = DMA_MEMORY_WIDTH_8BIT;
|
||||
currentState.dma_init_struct.memory_addr = (uint32_t)p_buffer;
|
||||
currentState.dma_init_struct.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||
currentState.dma_init_struct.number = number_of_byte;
|
||||
currentState.dma_init_struct.periph_addr = (uint32_t)&I2C_DATA(I2C0);
|
||||
currentState.dma_init_struct.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||
currentState.dma_init_struct.periph_width = DMA_PERIPHERAL_WIDTH_8BIT;
|
||||
currentState.dma_init_struct.priority = DMA_PRIORITY_ULTRA_HIGH;
|
||||
|
||||
if (currentState.isMemoryWrite) {
|
||||
currentState.dma_init_struct.direction = DMA_MEMORY_TO_PERIPHERAL;
|
||||
} else {
|
||||
currentState.dma_init_struct.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||
}
|
||||
// Clear flags
|
||||
I2C_STAT0(I2C0) = 0;
|
||||
I2C_STAT1(I2C0) = 0;
|
||||
i2c_flag_clear(I2C0, I2C_FLAG_ADDSEND);
|
||||
i2c_ackpos_config(I2C0, I2C_ACKPOS_CURRENT);
|
||||
i2c_data_receive(I2C0);
|
||||
i2c_data_receive(I2C0);
|
||||
currentState.currentStep = i2c_step::Write_start; // Always start in write mode
|
||||
TickType_t timeout = xTaskGetTickCount() + TICKS_100MS;
|
||||
while ((currentState.currentStep != i2c_step::Done) && (currentState.currentStep != i2c_step::Error_occured)) {
|
||||
if (xTaskGetTickCount() > timeout) {
|
||||
i2c_stop_on_bus(I2C0);
|
||||
return false;
|
||||
}
|
||||
perform_i2c_step();
|
||||
}
|
||||
return currentState.currentStep == i2c_step::Done;
|
||||
}
|
||||
|
||||
bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_buffer, uint16_t number_of_byte) {
|
||||
if (!lock())
|
||||
return false;
|
||||
bool res = perform_i2c_transaction(DevAddress, read_address, p_buffer, number_of_byte, false, false);
|
||||
bool res = false; // perform_i2c_transaction(DevAddress, read_address, p_buffer, number_of_byte, false, false);
|
||||
if (!res) {
|
||||
I2C_Unstick();
|
||||
}
|
||||
@@ -308,7 +38,7 @@ bool FRToSI2C::Mem_Read(uint16_t DevAddress, uint16_t read_address, uint8_t *p_b
|
||||
bool FRToSI2C::Mem_Write(uint16_t DevAddress, uint16_t MemAddress, uint8_t *p_buffer, uint16_t number_of_byte) {
|
||||
if (!lock())
|
||||
return false;
|
||||
bool res = perform_i2c_transaction(DevAddress, MemAddress, p_buffer, number_of_byte, true, false);
|
||||
bool res = false; // perform_i2c_transaction(DevAddress, MemAddress, p_buffer, number_of_byte, true, false);
|
||||
if (!res) {
|
||||
I2C_Unstick();
|
||||
}
|
||||
@@ -350,15 +80,10 @@ bool FRToSI2C::wakePart(uint16_t DevAddress) {
|
||||
// wakepart is a special case where only the device address is sent
|
||||
if (!lock())
|
||||
return false;
|
||||
bool res = perform_i2c_transaction(DevAddress, 0, NULL, 0, false, true);
|
||||
bool res = false; // perform_i2c_transaction(DevAddress, 0, NULL, 0, false, true);
|
||||
if (!res) {
|
||||
I2C_Unstick();
|
||||
}
|
||||
unlock();
|
||||
return res;
|
||||
}
|
||||
|
||||
void I2C_EV_IRQ() {}
|
||||
void I2C_ER_IRQ() {
|
||||
// Error callbacks
|
||||
}
|
||||
|
||||
@@ -18,12 +18,14 @@ volatile uint16_t i2c_nbytes;
|
||||
volatile uint16_t i2c_write_dress;
|
||||
volatile uint16_t i2c_read_dress;
|
||||
volatile uint8_t i2c_process_flag = 0;
|
||||
static bool fastPWM;
|
||||
static void switchToSlowPWM(void);
|
||||
static void switchToFastPWM(void);
|
||||
void ADC0_1_IRQHandler(void) {
|
||||
|
||||
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||
static bool fastPWM;
|
||||
static void switchToSlowPWM(void);
|
||||
static void switchToFastPWM(void);
|
||||
|
||||
void ADC0_1_IRQHandler(void) {
|
||||
|
||||
// adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||
// unblock the PID controller thread
|
||||
if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED) {
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
@@ -34,84 +36,85 @@ void ADC0_1_IRQHandler(void) {
|
||||
}
|
||||
}
|
||||
|
||||
volatile uint16_t PWMSafetyTimer = 0;
|
||||
volatile uint8_t pendingPWM = 0;
|
||||
void TIMER1_IRQHandler(void) {
|
||||
static bool lastPeriodWasFast = false;
|
||||
// volatile uint16_t PWMSafetyTimer = 0;
|
||||
// volatile uint8_t pendingPWM = 0;
|
||||
// void TIMER1_IRQHandler(void) {
|
||||
// static bool lastPeriodWasFast = false;
|
||||
|
||||
if (timer_interrupt_flag_get(TIMER1, TIMER_INT_UP) == SET) {
|
||||
timer_interrupt_flag_clear(TIMER1, TIMER_INT_UP);
|
||||
// rollover turn on output if required
|
||||
if (PWMSafetyTimer) {
|
||||
PWMSafetyTimer--;
|
||||
if (lastPeriodWasFast != fastPWM) {
|
||||
if (fastPWM) {
|
||||
switchToFastPWM();
|
||||
} else {
|
||||
switchToSlowPWM();
|
||||
}
|
||||
}
|
||||
if (pendingPWM) {
|
||||
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, pendingPWM);
|
||||
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 50);
|
||||
} else {
|
||||
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (timer_interrupt_flag_get(TIMER1, TIMER_INT_CH1) == SET) {
|
||||
timer_interrupt_flag_clear(TIMER1, TIMER_INT_CH1);
|
||||
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);
|
||||
}
|
||||
}
|
||||
// if (timer_interrupt_flag_get(TIMER1, TIMER_INT_UP) == SET) {
|
||||
// timer_interrupt_flag_clear(TIMER1, TIMER_INT_UP);
|
||||
// // rollover turn on output if required
|
||||
// if (PWMSafetyTimer) {
|
||||
// PWMSafetyTimer--;
|
||||
// if (lastPeriodWasFast != fastPWM) {
|
||||
// if (fastPWM) {
|
||||
// switchToFastPWM();
|
||||
// } else {
|
||||
// switchToSlowPWM();
|
||||
// }
|
||||
// }
|
||||
// if (pendingPWM) {
|
||||
// timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, pendingPWM);
|
||||
// timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 50);
|
||||
// } else {
|
||||
// timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// if (timer_interrupt_flag_get(TIMER1, TIMER_INT_CH1) == SET) {
|
||||
// timer_interrupt_flag_clear(TIMER1, TIMER_INT_CH1);
|
||||
// timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);
|
||||
// }
|
||||
// }
|
||||
|
||||
void switchToFastPWM(void) {
|
||||
fastPWM = true;
|
||||
totalPWM = powerPWM + tempMeasureTicks + holdoffTicks;
|
||||
TIMER_CAR(TIMER1) = (uint32_t)totalPWM;
|
||||
// fastPWM = true;
|
||||
// totalPWM = powerPWM + tempMeasureTicks + holdoffTicks;
|
||||
// TIMER_CAR(TIMER1) = (uint32_t)totalPWM;
|
||||
|
||||
// ~10Hz
|
||||
TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks;
|
||||
// 1 kHz tick rate
|
||||
TIMER_PSC(TIMER1) = 18000;
|
||||
// // ~10Hz
|
||||
// TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks;
|
||||
// // 1 kHz tick rate
|
||||
// TIMER_PSC(TIMER1) = 18000;
|
||||
}
|
||||
|
||||
void switchToSlowPWM(void) {
|
||||
// 5Hz
|
||||
fastPWM = false;
|
||||
totalPWM = powerPWM + tempMeasureTicks / 2 + holdoffTicks / 2;
|
||||
TIMER_CAR(TIMER1) = (uint32_t)totalPWM;
|
||||
TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks / 2;
|
||||
TIMER_PSC(TIMER1) = 36000;
|
||||
// fastPWM = false;
|
||||
// totalPWM = powerPWM + tempMeasureTicks / 2 + holdoffTicks / 2;
|
||||
// TIMER_CAR(TIMER1) = (uint32_t)totalPWM;
|
||||
// TIMER_CH0CV(TIMER1) = powerPWM + holdoffTicks / 2;
|
||||
// TIMER_PSC(TIMER1) = 36000;
|
||||
}
|
||||
void setTipPWM(const uint8_t pulse, const bool shouldUseFastModePWM) {
|
||||
PWMSafetyTimer = 10; // This is decremented in the handler for PWM so that the tip pwm is
|
||||
// disabled if the PID task is not scheduled often enough.
|
||||
pendingPWM = pulse;
|
||||
fastPWM = shouldUseFastModePWM;
|
||||
// PWMSafetyTimer = 10; // This is decremented in the handler for PWM so that the tip pwm is
|
||||
// // disabled if the PID task is not scheduled often enough.
|
||||
// pendingPWM = pulse;
|
||||
// fastPWM = shouldUseFastModePWM;
|
||||
}
|
||||
extern osThreadId POWTaskHandle;
|
||||
|
||||
void EXTI5_9_IRQHandler(void) {
|
||||
#if POW_PD
|
||||
if (RESET != exti_interrupt_flag_get(EXTI_5)) {
|
||||
exti_interrupt_flag_clear(EXTI_5);
|
||||
// #if POW_PD
|
||||
// if (RESET != exti_interrupt_flag_get(EXTI_5)) {
|
||||
// exti_interrupt_flag_clear(EXTI_5);
|
||||
|
||||
if (POWTaskHandle != nullptr) {
|
||||
BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);
|
||||
/* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.
|
||||
The macro used to do this is dependent on the port and may be called
|
||||
portEND_SWITCHING_ISR. */
|
||||
portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
// if (POWTaskHandle != nullptr) {
|
||||
// BaseType_t xHigherPriorityTaskWoken = pdFALSE;
|
||||
// xTaskNotifyFromISR(POWTaskHandle, 1, eSetBits, &xHigherPriorityTaskWoken);
|
||||
// /* Force a context switch if xHigherPriorityTaskWoken is now set to pdTRUE.
|
||||
// The macro used to do this is dependent on the port and may be called
|
||||
// portEND_SWITCHING_ISR. */
|
||||
// portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
|
||||
// }
|
||||
// }
|
||||
// #endif
|
||||
}
|
||||
|
||||
bool getFUS302IRQLow() {
|
||||
// Return true if the IRQ line is still held low
|
||||
return (RESET == gpio_input_bit_get(FUSB302_IRQ_GPIO_Port, FUSB302_IRQ_Pin));
|
||||
return false;
|
||||
// return (RESET == gpio_input_bit_get(FUSB302_IRQ_GPIO_Port, FUSB302_IRQ_Pin));
|
||||
}
|
||||
// These are unused for now
|
||||
void I2C0_EV_IRQHandler(void) {}
|
||||
|
||||
@@ -13,36 +13,40 @@
|
||||
#ifdef POW_QC
|
||||
void QC_DPlusZero_Six() {
|
||||
// pull down D+
|
||||
gpio_bit_reset(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin);
|
||||
// #TODO
|
||||
}
|
||||
void QC_DNegZero_Six() {
|
||||
gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);
|
||||
gpio_bit_reset(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);
|
||||
// gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);
|
||||
// gpio_bit_reset(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);
|
||||
}
|
||||
void QC_DPlusThree_Three() {
|
||||
// pull up D+
|
||||
gpio_bit_set(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin);
|
||||
// gpio_bit_set(QC_DP_LOW_GPIO_Port, QC_DP_LOW_Pin);
|
||||
}
|
||||
void QC_DNegThree_Three() {
|
||||
gpio_bit_set(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);
|
||||
gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);
|
||||
// gpio_bit_set(QC_DM_LOW_GPIO_Port, QC_DM_LOW_Pin);
|
||||
// gpio_bit_set(QC_DM_HIGH_GPIO_Port, QC_DM_HIGH_Pin);
|
||||
}
|
||||
void QC_DM_PullDown() { // gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, USB_DM_Pin);
|
||||
}
|
||||
void QC_DM_No_PullDown() { // gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, USB_DM_Pin);
|
||||
}
|
||||
void QC_DM_PullDown() { gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, USB_DM_Pin); }
|
||||
void QC_DM_No_PullDown() { gpio_init(USB_DM_LOW_GPIO_Port, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_2MHZ, USB_DM_Pin); }
|
||||
void QC_Init_GPIO() {
|
||||
// Setup any GPIO into the right states for QC
|
||||
// D+ pulldown as output
|
||||
gpio_init(QC_DP_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DP_LOW_Pin);
|
||||
// gpio_init(QC_DP_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DP_LOW_Pin);
|
||||
// Make two D- pins floating
|
||||
QC_DM_PullDown();
|
||||
}
|
||||
void QC_Post_Probe_En() {
|
||||
// Make two D- pins outputs
|
||||
gpio_init(QC_DM_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_LOW_Pin);
|
||||
gpio_init(QC_DM_HIGH_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_HIGH_Pin);
|
||||
// gpio_init(QC_DM_LOW_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_LOW_Pin);
|
||||
// gpio_init(QC_DM_HIGH_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, QC_DM_HIGH_Pin);
|
||||
}
|
||||
|
||||
uint8_t QC_DM_PulledDown() { return gpio_input_bit_get(USB_DM_LOW_GPIO_Port, USB_DM_Pin) == RESET ? 1 : 0; }
|
||||
uint8_t QC_DM_PulledDown() {
|
||||
// return gpio_input_bit_get(USB_DM_LOW_GPIO_Port, USB_DM_Pin) == RESET ? 1 : 0;
|
||||
}
|
||||
#endif
|
||||
void QC_resync() {
|
||||
#ifdef POW_QC
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
# BSP section for Pinecil
|
||||
# BSP section for Magic
|
||||
|
||||
This folder contains the hardware abstractions required for the Pinecil. A RISC-V based soldering iron.
|
||||
This folder contains the hardware abstractions required for the Magic. A RISC-V based soldering iron.
|
||||
|
||||
@@ -16,34 +16,9 @@
|
||||
uint16_t ADCReadings[ADC_NORM_SAMPLES]; // room for 32 lots of the pair of readings
|
||||
|
||||
// Functions
|
||||
void setup_gpio();
|
||||
void setup_dma();
|
||||
void setup_i2c();
|
||||
void setup_adc();
|
||||
void setup_timers();
|
||||
void setup_iwdg();
|
||||
void setup_uart();
|
||||
|
||||
void hardware_init() {
|
||||
// I2C
|
||||
setup_i2c();
|
||||
// GPIO
|
||||
setup_gpio();
|
||||
// DMA
|
||||
setup_dma();
|
||||
// ADC's
|
||||
setup_adc();
|
||||
// Timers
|
||||
setup_timers();
|
||||
// Watchdog
|
||||
setup_iwdg();
|
||||
// ELIC
|
||||
eclic_priority_group_set(ECLIC_PRIGROUP_LEVEL0_PRIO4);
|
||||
// uart for debugging
|
||||
setup_uart();
|
||||
/* enable TIMER1 - PWM control timing*/
|
||||
timer_enable(TIMER1);
|
||||
timer_enable(TIMER2);
|
||||
// #TODO
|
||||
}
|
||||
|
||||
uint16_t getADCHandleTemp(uint8_t sample) {
|
||||
@@ -72,6 +47,7 @@ uint16_t getADCVin(uint8_t sample) {
|
||||
}
|
||||
return filter.average();
|
||||
}
|
||||
|
||||
// Returns either average or instant value. When sample is set the samples from the injected ADC are copied to the filter and then the raw reading is returned
|
||||
uint16_t getTipRawTemp(uint8_t sample) {
|
||||
static history<uint16_t, ADC_FILTER_LEN> filter = {{0}, 0, 0};
|
||||
@@ -89,254 +65,6 @@ uint16_t getTipRawTemp(uint8_t sample) {
|
||||
return filter.average();
|
||||
}
|
||||
|
||||
void setup_uart() {
|
||||
// Setup the uart pins as a uart with dma
|
||||
|
||||
/* enable USART clock */
|
||||
rcu_periph_clock_enable(RCU_USART1);
|
||||
|
||||
/* connect port to USARTx_Tx */
|
||||
gpio_init(UART_TX_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_10MHZ, UART_TX_Pin);
|
||||
|
||||
/* connect port to USARTx_Rx */
|
||||
gpio_init(UART_RX_GPIO_Port, GPIO_MODE_IPU, GPIO_OSPEED_10MHZ, UART_RX_Pin);
|
||||
|
||||
/* USART configure */
|
||||
usart_deinit(UART_PERIF);
|
||||
usart_baudrate_set(UART_PERIF, 1000000);
|
||||
usart_word_length_set(UART_PERIF, USART_WL_8BIT);
|
||||
usart_stop_bit_set(UART_PERIF, USART_STB_1BIT);
|
||||
usart_parity_config(UART_PERIF, USART_PM_NONE);
|
||||
usart_hardware_flow_rts_config(UART_PERIF, USART_RTS_DISABLE);
|
||||
usart_hardware_flow_cts_config(UART_PERIF, USART_CTS_DISABLE);
|
||||
usart_receive_config(UART_PERIF, USART_RECEIVE_DISABLE); // Dont use rx for now
|
||||
usart_transmit_config(UART_PERIF, USART_TRANSMIT_ENABLE);
|
||||
eclic_irq_enable(USART1_IRQn, 15, 15);
|
||||
usart_enable(UART_PERIF);
|
||||
}
|
||||
|
||||
void setup_gpio() {
|
||||
/* enable GPIOB clock */
|
||||
rcu_periph_clock_enable(RCU_GPIOA);
|
||||
/* enable GPIOB clock */
|
||||
rcu_periph_clock_enable(RCU_GPIOB);
|
||||
// Alternate function clock enable
|
||||
rcu_periph_clock_enable(RCU_AF);
|
||||
// Buttons as input
|
||||
gpio_init(KEY_A_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, KEY_A_Pin);
|
||||
gpio_init(KEY_B_GPIO_Port, GPIO_MODE_IPD, GPIO_OSPEED_2MHZ, KEY_B_Pin);
|
||||
// OLED reset as output
|
||||
gpio_init(OLED_RESET_GPIO_Port, GPIO_MODE_OUT_PP, GPIO_OSPEED_2MHZ, OLED_RESET_Pin);
|
||||
// I2C as AF Open Drain
|
||||
gpio_init(SDA_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SDA_Pin);
|
||||
gpio_init(SCL_GPIO_Port, GPIO_MODE_AF_OD, GPIO_OSPEED_50MHZ, SCL_Pin);
|
||||
// PWM output as AF Push Pull
|
||||
gpio_init(PWM_Out_GPIO_Port, GPIO_MODE_AF_PP, GPIO_OSPEED_50MHZ, PWM_Out_Pin);
|
||||
// Analog Inputs ... as analog inputs
|
||||
gpio_init(TMP36_INPUT_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, TMP36_INPUT_Pin);
|
||||
gpio_init(TIP_TEMP_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, TIP_TEMP_Pin);
|
||||
gpio_init(VIN_GPIO_Port, GPIO_MODE_AIN, GPIO_OSPEED_2MHZ, VIN_Pin);
|
||||
|
||||
// Remap PB4 away from JTAG NJRST
|
||||
gpio_pin_remap_config(GPIO_SWJ_NONJTRST_REMAP, ENABLE);
|
||||
// FUSB interrupt
|
||||
gpio_init(FUSB302_IRQ_GPIO_Port, GPIO_MODE_IPU, GPIO_OSPEED_50MHZ, FUSB302_IRQ_Pin);
|
||||
}
|
||||
void setup_dma() {
|
||||
// Setup DMA for ADC0
|
||||
{
|
||||
/* enable DMA0 clock */
|
||||
rcu_periph_clock_enable(RCU_DMA0);
|
||||
// rcu_periph_clock_enable(RCU_DMA1);
|
||||
/* ADC_DMA_channel configuration */
|
||||
dma_parameter_struct dma_data_parameter;
|
||||
|
||||
/* ADC DMA_channel configuration */
|
||||
dma_deinit(DMA0, DMA_CH0);
|
||||
|
||||
/* initialize DMA data mode */
|
||||
dma_data_parameter.periph_addr = (uint32_t)(&ADC_RDATA(ADC0));
|
||||
dma_data_parameter.periph_inc = DMA_PERIPH_INCREASE_DISABLE;
|
||||
dma_data_parameter.memory_addr = (uint32_t)(ADCReadings);
|
||||
dma_data_parameter.memory_inc = DMA_MEMORY_INCREASE_ENABLE;
|
||||
dma_data_parameter.periph_width = DMA_PERIPHERAL_WIDTH_16BIT;
|
||||
dma_data_parameter.memory_width = DMA_MEMORY_WIDTH_16BIT;
|
||||
dma_data_parameter.direction = DMA_PERIPHERAL_TO_MEMORY;
|
||||
dma_data_parameter.number = ADC_NORM_SAMPLES;
|
||||
dma_data_parameter.priority = DMA_PRIORITY_HIGH;
|
||||
dma_init(DMA0, DMA_CH0, &dma_data_parameter);
|
||||
|
||||
dma_circulation_enable(DMA0, DMA_CH0);
|
||||
|
||||
/* enable DMA channel */
|
||||
dma_channel_enable(DMA0, DMA_CH0);
|
||||
}
|
||||
}
|
||||
void setup_i2c() {
|
||||
/* enable I2C0 clock */
|
||||
rcu_periph_clock_enable(RCU_I2C0);
|
||||
/* enable DMA0 clock */
|
||||
rcu_periph_clock_enable(RCU_DMA0);
|
||||
// Setup I20 at 400kHz
|
||||
i2c_clock_config(I2C0, 400 * 1000, I2C_DTCY_2);
|
||||
i2c_mode_addr_config(I2C0, I2C_I2CMODE_ENABLE, I2C_ADDFORMAT_7BITS, 0x7F);
|
||||
i2c_enable(I2C0);
|
||||
/* enable acknowledge */
|
||||
i2c_ack_config(I2C0, I2C_ACK_ENABLE);
|
||||
}
|
||||
void setup_adc() {
|
||||
|
||||
// Setup ADC in normal + injected mode
|
||||
// Want it to sample handle temp and input voltage normally via dma
|
||||
// Then injected trigger to sample tip temp
|
||||
memset(ADCReadings, 0, sizeof(ADCReadings));
|
||||
rcu_periph_clock_enable(RCU_ADC0);
|
||||
rcu_periph_clock_enable(RCU_ADC1);
|
||||
adc_deinit(ADC0);
|
||||
adc_deinit(ADC1);
|
||||
/* config ADC clock */
|
||||
rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV16);
|
||||
// Run in normal parallel + inserted parallel
|
||||
adc_mode_config(ADC_DAUL_INSERTED_PARALLEL);
|
||||
adc_special_function_config(ADC0, ADC_CONTINUOUS_MODE, ENABLE);
|
||||
adc_special_function_config(ADC0, ADC_SCAN_MODE, ENABLE);
|
||||
adc_special_function_config(ADC1, ADC_CONTINUOUS_MODE, ENABLE);
|
||||
adc_special_function_config(ADC1, ADC_SCAN_MODE, ENABLE);
|
||||
// Align right
|
||||
adc_data_alignment_config(ADC0, ADC_DATAALIGN_RIGHT);
|
||||
adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT);
|
||||
// Setup reading the handle temp
|
||||
adc_channel_length_config(ADC0, ADC_REGULAR_CHANNEL, 1);
|
||||
adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 0);
|
||||
// Setup the two channels
|
||||
adc_regular_channel_config(ADC0, 0, TMP36_ADC0_CHANNEL,
|
||||
ADC_SAMPLETIME_71POINT5); // temp sensor
|
||||
// Setup that we want all 4 inserted readings to be the tip temp
|
||||
adc_channel_length_config(ADC0, ADC_INSERTED_CHANNEL, 4);
|
||||
adc_channel_length_config(ADC1, ADC_INSERTED_CHANNEL, 4);
|
||||
for (int rank = 0; rank < 4; rank++) {
|
||||
adc_inserted_channel_config(ADC0, rank, TIP_TEMP_ADC0_CHANNEL, ADC_SAMPLETIME_28POINT5);
|
||||
adc_inserted_channel_config(ADC1, rank, VIN_ADC1_CHANNEL, ADC_SAMPLETIME_28POINT5);
|
||||
}
|
||||
// Setup timer 1 channel 0 to trigger injected measurements
|
||||
adc_external_trigger_source_config(ADC0, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T1_TRGO);
|
||||
adc_external_trigger_source_config(ADC1, ADC_INSERTED_CHANNEL, ADC0_1_EXTTRIG_INSERTED_T1_TRGO);
|
||||
|
||||
adc_external_trigger_source_config(ADC0, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);
|
||||
adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_EXTTRIG_REGULAR_NONE);
|
||||
// Enable triggers for the ADC
|
||||
adc_external_trigger_config(ADC0, ADC_INSERTED_CHANNEL, ENABLE);
|
||||
adc_external_trigger_config(ADC1, ADC_INSERTED_CHANNEL, ENABLE);
|
||||
adc_external_trigger_config(ADC0, ADC_REGULAR_CHANNEL, ENABLE);
|
||||
adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE);
|
||||
|
||||
adc_watchdog_disable(ADC0);
|
||||
adc_watchdog_disable(ADC1);
|
||||
adc_resolution_config(ADC0, ADC_RESOLUTION_12B);
|
||||
adc_resolution_config(ADC1, ADC_RESOLUTION_12B);
|
||||
/* clear the ADC flag */
|
||||
adc_oversample_mode_disable(ADC0);
|
||||
adc_oversample_mode_disable(ADC1);
|
||||
adc_enable(ADC0);
|
||||
adc_calibration_enable(ADC0);
|
||||
adc_enable(ADC1);
|
||||
adc_calibration_enable(ADC1);
|
||||
adc_dma_mode_enable(ADC0);
|
||||
// Enable interrupt on end of injected readings
|
||||
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOC);
|
||||
adc_interrupt_flag_clear(ADC0, ADC_INT_FLAG_EOIC);
|
||||
adc_interrupt_enable(ADC0, ADC_INT_EOIC);
|
||||
eclic_irq_enable(ADC0_1_IRQn, 2, 0);
|
||||
adc_software_trigger_enable(ADC0, ADC_REGULAR_CHANNEL);
|
||||
adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);
|
||||
adc_tempsensor_vrefint_disable();
|
||||
}
|
||||
void setup_timers() {
|
||||
// Setup timer 1 to run the actual PWM level
|
||||
/* enable timer1 clock */
|
||||
rcu_periph_clock_enable(RCU_TIMER1);
|
||||
rcu_periph_clock_enable(RCU_TIMER2);
|
||||
timer_oc_parameter_struct timer_ocintpara;
|
||||
timer_parameter_struct timer_initpara;
|
||||
{
|
||||
// deinit to reset the timer
|
||||
timer_deinit(TIMER1);
|
||||
/* initialize TIMER init parameter struct */
|
||||
timer_struct_para_init(&timer_initpara);
|
||||
/* TIMER1 configuration */
|
||||
timer_initpara.prescaler = 30000;
|
||||
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
timer_initpara.period = powerPWM + tempMeasureTicks + holdoffTicks;
|
||||
timer_initpara.clockdivision = TIMER_CKDIV_DIV4;
|
||||
timer_initpara.repetitioncounter = 0;
|
||||
timer_init(TIMER1, &timer_initpara);
|
||||
|
||||
/* CH0 configured to implement the PWM irq's for the output control*/
|
||||
timer_channel_output_struct_para_init(&timer_ocintpara);
|
||||
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_LOW;
|
||||
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
|
||||
timer_channel_output_config(TIMER1, TIMER_CH_0, &timer_ocintpara);
|
||||
|
||||
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_0, powerPWM + holdoffTicks);
|
||||
timer_channel_output_mode_config(TIMER1, TIMER_CH_0, TIMER_OC_MODE_PWM1);
|
||||
timer_channel_output_shadow_config(TIMER1, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
|
||||
/* CH1 used for irq */
|
||||
timer_channel_output_struct_para_init(&timer_ocintpara);
|
||||
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
|
||||
timer_channel_output_config(TIMER1, TIMER_CH_1, &timer_ocintpara);
|
||||
timer_master_output_trigger_source_select(TIMER1, TIMER_TRI_OUT_SRC_CH0);
|
||||
timer_channel_output_pulse_value_config(TIMER1, TIMER_CH_1, 0);
|
||||
timer_channel_output_mode_config(TIMER1, TIMER_CH_1, TIMER_OC_MODE_PWM0);
|
||||
timer_channel_output_shadow_config(TIMER1, TIMER_CH_1, TIMER_OC_SHADOW_DISABLE);
|
||||
// IRQ
|
||||
timer_interrupt_enable(TIMER1, TIMER_INT_UP);
|
||||
timer_interrupt_enable(TIMER1, TIMER_INT_CH1);
|
||||
}
|
||||
|
||||
eclic_irq_enable(TIMER1_IRQn, 2, 5);
|
||||
// Setup timer 2 to control the output signal
|
||||
{
|
||||
timer_deinit(TIMER2);
|
||||
/* initialize TIMER init parameter struct */
|
||||
timer_struct_para_init(&timer_initpara);
|
||||
/* TIMER1 configuration */
|
||||
timer_initpara.prescaler = 200;
|
||||
timer_initpara.alignedmode = TIMER_COUNTER_EDGE;
|
||||
timer_initpara.counterdirection = TIMER_COUNTER_UP;
|
||||
timer_initpara.period = 100;
|
||||
timer_initpara.clockdivision = TIMER_CKDIV_DIV4;
|
||||
timer_initpara.repetitioncounter = 0;
|
||||
timer_init(TIMER2, &timer_initpara);
|
||||
|
||||
/* CH0 configuration in PWM mode0 */
|
||||
timer_channel_output_struct_para_init(&timer_ocintpara);
|
||||
timer_ocintpara.outputstate = TIMER_CCX_ENABLE;
|
||||
timer_ocintpara.outputnstate = TIMER_CCXN_DISABLE;
|
||||
timer_ocintpara.ocpolarity = TIMER_OC_POLARITY_HIGH;
|
||||
timer_ocintpara.ocnpolarity = TIMER_OCN_POLARITY_HIGH;
|
||||
timer_ocintpara.ocidlestate = TIMER_OC_IDLE_STATE_LOW;
|
||||
timer_ocintpara.ocnidlestate = TIMER_OCN_IDLE_STATE_LOW;
|
||||
timer_channel_output_config(TIMER2, TIMER_CH_0, &timer_ocintpara);
|
||||
timer_channel_output_pulse_value_config(TIMER2, TIMER_CH_0, 0);
|
||||
timer_channel_output_mode_config(TIMER2, TIMER_CH_0, TIMER_OC_MODE_PWM0);
|
||||
timer_channel_output_shadow_config(TIMER2, TIMER_CH_0, TIMER_OC_SHADOW_DISABLE);
|
||||
timer_auto_reload_shadow_enable(TIMER2);
|
||||
timer_enable(TIMER2);
|
||||
}
|
||||
}
|
||||
void setup_iwdg() {
|
||||
|
||||
fwdgt_config(0x0FFF, FWDGT_PSC_DIV256);
|
||||
fwdgt_enable();
|
||||
}
|
||||
|
||||
void setupFUSBIRQ() {
|
||||
eclic_global_interrupt_enable();
|
||||
eclic_irq_enable(EXTI5_9_IRQn, 15, 0);
|
||||
gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOB, GPIO_PIN_SOURCE_5);
|
||||
|
||||
/* configure key EXTI line */
|
||||
exti_init(EXTI_5, EXTI_INTERRUPT, EXTI_TRIG_FALLING);
|
||||
// #TODO
|
||||
}
|
||||
|
||||
39
source/Core/BSP/Magic/bl602_config.h
Normal file
39
source/Core/BSP/Magic/bl602_config.h
Normal file
@@ -0,0 +1,39 @@
|
||||
/**
|
||||
* @file bl602_config.h
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2021 Bouffalolab team
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __BL602_CONFIG_H__
|
||||
#define __BL602_CONFIG_H__
|
||||
|
||||
#if defined(bl602_iot)
|
||||
#include "bl602_iot/peripheral_config.h"
|
||||
#include "bl602_iot/clock_config.h"
|
||||
#include "bl602_iot/pinmux_config.h"
|
||||
#elif defined(bl602_boot2)
|
||||
#include "bl602_boot2/peripheral_config.h"
|
||||
#include "bl602_boot2/clock_config.h"
|
||||
#include "bl602_boot2/pinmux_config.h"
|
||||
#else
|
||||
#error "do not find board,please check your board name"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
224
source/Core/BSP/Magic/board.c
Normal file
224
source/Core/BSP/Magic/board.c
Normal file
@@ -0,0 +1,224 @@
|
||||
/**
|
||||
* @file board.c
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2021 Bouffalolab team
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "hal_gpio.h"
|
||||
#include "hal_clock.h"
|
||||
#include "bl602_glb.h"
|
||||
#include "bl602_config.h"
|
||||
#include "bflb_platform.h"
|
||||
|
||||
struct pin_mux_cfg {
|
||||
uint8_t pin;
|
||||
uint16_t func;
|
||||
};
|
||||
|
||||
static const struct pin_mux_cfg af_pin_table[] = {
|
||||
#ifdef CONFIG_GPIO0_FUNC
|
||||
{ .pin = GPIO_PIN_0,
|
||||
.func = CONFIG_GPIO0_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO1_FUNC
|
||||
{ .pin = GPIO_PIN_1,
|
||||
.func = CONFIG_GPIO1_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO2_FUNC
|
||||
{ .pin = GPIO_PIN_2,
|
||||
.func = CONFIG_GPIO2_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO3_FUNC
|
||||
{ .pin = GPIO_PIN_3,
|
||||
.func = CONFIG_GPIO3_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO4_FUNC
|
||||
{ .pin = GPIO_PIN_4,
|
||||
.func = CONFIG_GPIO4_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO5_FUNC
|
||||
{ .pin = GPIO_PIN_5,
|
||||
.func = CONFIG_GPIO5_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO6_FUNC
|
||||
{ .pin = GPIO_PIN_6,
|
||||
.func = CONFIG_GPIO6_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO7_FUNC
|
||||
{ .pin = GPIO_PIN_7,
|
||||
.func = CONFIG_GPIO7_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO8_FUNC
|
||||
{ .pin = GPIO_PIN_8,
|
||||
.func = CONFIG_GPIO8_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO9_FUNC
|
||||
{ .pin = GPIO_PIN_9,
|
||||
.func = CONFIG_GPIO9_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO10_FUNC
|
||||
{ .pin = GPIO_PIN_10,
|
||||
.func = CONFIG_GPIO10_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO11_FUNC
|
||||
{ .pin = GPIO_PIN_11,
|
||||
.func = CONFIG_GPIO11_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO12_FUNC
|
||||
{ .pin = GPIO_PIN_12,
|
||||
.func = CONFIG_GPIO12_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO13_FUNC
|
||||
{ .pin = GPIO_PIN_13,
|
||||
.func = CONFIG_GPIO13_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO14_FUNC
|
||||
{ .pin = GPIO_PIN_14,
|
||||
.func = CONFIG_GPIO14_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO15_FUNC
|
||||
{ .pin = GPIO_PIN_15,
|
||||
.func = CONFIG_GPIO15_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO16_FUNC
|
||||
{ .pin = GPIO_PIN_16,
|
||||
.func = CONFIG_GPIO16_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO17_FUNC
|
||||
{ .pin = GPIO_PIN_17,
|
||||
.func = CONFIG_GPIO17_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO18_FUNC
|
||||
{ .pin = GPIO_PIN_18,
|
||||
.func = CONFIG_GPIO18_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO19_FUNC
|
||||
{ .pin = GPIO_PIN_19,
|
||||
.func = CONFIG_GPIO19_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO20_FUNC
|
||||
{ .pin = GPIO_PIN_20,
|
||||
.func = CONFIG_GPIO20_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO21_FUNC
|
||||
{ .pin = GPIO_PIN_21,
|
||||
.func = CONFIG_GPIO21_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO22_FUNC
|
||||
{ .pin = GPIO_PIN_22,
|
||||
.func = CONFIG_GPIO22_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO23_FUNC
|
||||
{ .pin = GPIO_PIN_23,
|
||||
.func = CONFIG_GPIO23_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO24_FUNC
|
||||
{ .pin = GPIO_PIN_24,
|
||||
.func = CONFIG_GPIO24_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO25_FUNC
|
||||
{ .pin = GPIO_PIN_25,
|
||||
.func = CONFIG_GPIO25_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO26_FUNC
|
||||
{ .pin = GPIO_PIN_26,
|
||||
.func = CONFIG_GPIO26_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO27_FUNC
|
||||
{ .pin = GPIO_PIN_27,
|
||||
.func = CONFIG_GPIO27_FUNC },
|
||||
#endif
|
||||
#ifdef CONFIG_GPIO28_FUNC
|
||||
{ .pin = GPIO_PIN_28,
|
||||
.func = CONFIG_GPIO28_FUNC },
|
||||
#endif
|
||||
};
|
||||
|
||||
static void board_pin_mux_init(void)
|
||||
{
|
||||
GLB_GPIO_Cfg_Type gpio_cfg;
|
||||
|
||||
gpio_cfg.drive = 0;
|
||||
gpio_cfg.smtCtrl = 1;
|
||||
|
||||
for (int i = 0; i < sizeof(af_pin_table) / sizeof(af_pin_table[0]); i++) {
|
||||
gpio_cfg.gpioMode = GPIO_MODE_AF;
|
||||
gpio_cfg.pullType = GPIO_PULL_UP;
|
||||
gpio_cfg.gpioPin = af_pin_table[i].pin;
|
||||
gpio_cfg.gpioFun = af_pin_table[i].func;
|
||||
|
||||
if (af_pin_table[i].func == GPIO_FUN_UNUSED) {
|
||||
continue;
|
||||
} else if (af_pin_table[i].func == GPIO_FUN_PWM) {
|
||||
gpio_cfg.pullType = GPIO_PULL_DOWN;
|
||||
}
|
||||
// else if((af_pin_table[i].func == GPIO_FUN_DAC)|| (af_pin_table[i].func == GPIO_FUN_ADC))
|
||||
// {
|
||||
// gpio_cfg.gpioFun = GPIO_FUN_ANALOG;
|
||||
// gpio_cfg.gpioMode = GPIO_MODE_ANALOG;
|
||||
// }
|
||||
else if ((af_pin_table[i].func & 0x70) == 0x70) {
|
||||
gpio_cfg.gpioFun = GPIO_FUN_UART;
|
||||
uint8_t uart_func = af_pin_table[i].func & 0x07;
|
||||
uint8_t uart_sig = gpio_cfg.gpioPin % 8;
|
||||
/*link to one uart sig*/
|
||||
GLB_UART_Fun_Sel((GLB_UART_SIG_Type)uart_sig, (GLB_UART_SIG_FUN_Type)uart_func);
|
||||
GLB_UART_Fun_Sel((GLB_UART_SIG_Type)uart_func, (GLB_UART_SIG_FUN_Type)uart_sig);
|
||||
}
|
||||
|
||||
GLB_GPIO_Init(&gpio_cfg);
|
||||
}
|
||||
}
|
||||
|
||||
static void board_clock_init(void)
|
||||
{
|
||||
system_clock_init();
|
||||
peripheral_clock_init();
|
||||
}
|
||||
|
||||
void bl_show_info(void)
|
||||
{
|
||||
MSG("\r\n");
|
||||
MSG(" ____ __ __ _ _ _ \r\n");
|
||||
MSG(" | _ \\ / _|/ _| | | | | | | \r\n");
|
||||
MSG(" | |_) | ___ _ _| |_| |_ __ _| | ___ | | __ _| |__ \r\n");
|
||||
MSG(" | _ < / _ \\| | | | _| _/ _` | |/ _ \\| |/ _` | '_ \\ \r\n");
|
||||
MSG(" | |_) | (_) | |_| | | | || (_| | | (_) | | (_| | |_) |\r\n");
|
||||
MSG(" |____/ \\___/ \\__,_|_| |_| \\__,_|_|\\___/|_|\\__,_|_.__/ \r\n");
|
||||
MSG("\r\n");
|
||||
MSG("Build:%s,%s\r\n", __TIME__, __DATE__);
|
||||
MSG("Copyright (c) 2021 Bouffalolab team\r\n");
|
||||
|
||||
#if 0
|
||||
MSG("root clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_ROOT_CLOCK) / 1000000);
|
||||
MSG("fclk clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_FCLK) / 1000000);
|
||||
MSG("bclk clock:%dM\r\n", system_clock_get(SYSTEM_CLOCK_BCLK) / 1000000);
|
||||
|
||||
MSG("uart clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_UART) / 1000000);
|
||||
MSG("spi clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_SPI) / 1000000);
|
||||
MSG("i2c clock:%dM\r\n", peripheral_clock_get(PERIPHERAL_CLOCK_I2C) / 1000000);
|
||||
#endif
|
||||
}
|
||||
|
||||
void board_init(void)
|
||||
{
|
||||
board_clock_init();
|
||||
board_pin_mux_init();
|
||||
}
|
||||
55
source/Core/BSP/Magic/clock_config.h
Normal file
55
source/Core/BSP/Magic/clock_config.h
Normal file
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* @file clock_config.h
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2021 Bouffalolab team
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _CLOCK_CONFIG_H
|
||||
#define _CLOCK_CONFIG_H
|
||||
|
||||
#define XTAL_TYPE EXTERNAL_XTAL_40M
|
||||
#define XTAL_32K_TYPE INTERNAL_RC_32K
|
||||
#define BSP_ROOT_CLOCK_SOURCE ROOT_CLOCK_SOURCE_PLL_160M
|
||||
|
||||
#define BSP_FCLK_DIV 0
|
||||
#define BSP_BCLK_DIV 1
|
||||
|
||||
#if defined(BSP_USING_UART0) || defined(BSP_USING_UART1)
|
||||
#define BSP_UART_CLOCK_SOURCE ROOT_CLOCK_SOURCE_PLL_160M
|
||||
#define BSP_UART_CLOCK_DIV 0
|
||||
#endif
|
||||
#if defined(BSP_USING_I2C0)
|
||||
#define BSP_I2C_CLOCK_SOURCE ROOT_CLOCK_SOURCE_BCLK
|
||||
#define BSP_I2C_CLOCK_DIV 0
|
||||
#endif
|
||||
#if defined(BSP_USING_SPI0)
|
||||
#define BSP_SPI_CLOCK_SOURCE ROOT_CLOCK_SOURCE_BCLK
|
||||
#define BSP_SPI_CLOCK_DIV 0
|
||||
#endif
|
||||
#if defined(BSP_USING_ADC0)
|
||||
#define BSP_ADC_CLOCK_SOURCE ROOT_CLOCK_SOURCE_XCLK
|
||||
#define BSP_ADC_CLOCK_DIV 0
|
||||
#endif
|
||||
#if defined(BSP_USING_DAC0)
|
||||
#define BSP_DAC_CLOCK_SOURCE ROOT_CLOCK_SOURCE_AUPLL
|
||||
#define BSP_DAC_CLOCK_DIV 1
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@@ -109,11 +109,11 @@
|
||||
|
||||
#define OP_AMP_GAIN_STAGE_PINECIL (1 + (OP_AMP_Rf_Pinecil / OP_AMP_Rin_Pinecil))
|
||||
|
||||
#if defined(MODEL_Pinecil) == 0
|
||||
#if defined(MODEL_Magic) == 0
|
||||
#error "No model defined!"
|
||||
#endif
|
||||
|
||||
#ifdef MODEL_Pinecil
|
||||
#ifdef MODEL_Magic
|
||||
#define SOLDERING_TEMP 320 // Default soldering temp is 320.0 °C
|
||||
#define VOLTAGE_DIV 467 // 467 - Default divider from schematic
|
||||
#define CALIBRATION_OFFSET 900 // 900 - Default adc offset in uV
|
||||
|
||||
@@ -7,37 +7,19 @@
|
||||
|
||||
#include "BSP.h"
|
||||
#include "BSP_Flash.h"
|
||||
#include "gd32vf103_libopt.h"
|
||||
#include "string.h"
|
||||
#define FMC_PAGE_SIZE ((uint16_t)0x400U)
|
||||
// static uint16_t settings_page[FMC_PAGE_SIZE] __attribute__ ((section (".settings_page")));
|
||||
// Linker script doesnt want to play, so for now its hard coded
|
||||
#define SETTINGS_START_PAGE (0x08000000 + (127 * 1024))
|
||||
uint8_t flash_save_buffer(const uint8_t *buffer, const uint16_t length) {
|
||||
|
||||
/* unlock the flash program/erase controller */
|
||||
fmc_unlock();
|
||||
|
||||
/* clear all pending flags */
|
||||
fmc_flag_clear(FMC_FLAG_END);
|
||||
fmc_flag_clear(FMC_FLAG_WPERR);
|
||||
fmc_flag_clear(FMC_FLAG_PGERR);
|
||||
resetWatchdog();
|
||||
fmc_page_erase((uint32_t)SETTINGS_START_PAGE);
|
||||
resetWatchdog();
|
||||
uint16_t *data = (uint16_t *)buffer;
|
||||
for (uint16_t i = 0; i < (length / 2); i++) {
|
||||
fmc_halfword_program((uint32_t)SETTINGS_START_PAGE + (i * 2), data[i]);
|
||||
fmc_flag_clear(FMC_FLAG_END);
|
||||
fmc_flag_clear(FMC_FLAG_WPERR);
|
||||
fmc_flag_clear(FMC_FLAG_PGERR);
|
||||
resetWatchdog();
|
||||
}
|
||||
fmc_lock();
|
||||
// #TODO
|
||||
return 1;
|
||||
}
|
||||
|
||||
void flash_read_buffer(uint8_t *buffer, const uint16_t length) {
|
||||
return;
|
||||
// #TODO
|
||||
uint32_t *b = (uint32_t *)buffer;
|
||||
uint32_t *b2 = (uint32_t *)SETTINGS_START_PAGE;
|
||||
for (int i = 0; i < length / 4; i++) {
|
||||
|
||||
243
source/Core/BSP/Magic/peripheral_config.h
Normal file
243
source/Core/BSP/Magic/peripheral_config.h
Normal file
@@ -0,0 +1,243 @@
|
||||
/**
|
||||
* @file peripheral_config.h
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2021 Bouffalolab team
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _PERIPHERAL_CONFIG_H_
|
||||
#define _PERIPHERAL_CONFIG_H_
|
||||
|
||||
/* PERIPHERAL USING LIST */
|
||||
#define BSP_USING_UART0
|
||||
/* ----------------------*/
|
||||
|
||||
/* PERIPHERAL With DMA LIST */
|
||||
#define BSP_USING_DAC0
|
||||
#define BSP_USING_DMA0_CH0
|
||||
#define BSP_USING_DMA0_CH1
|
||||
#define BSP_USING_DMA0_CH2
|
||||
#define BSP_USING_DMA0_CH3
|
||||
#define BSP_USING_DMA0_CH4
|
||||
#define BSP_USING_DMA0_CH5
|
||||
#define BSP_USING_DMA0_CH6
|
||||
#define BSP_USING_DMA0_CH7
|
||||
|
||||
/* PERIPHERAL CONFIG */
|
||||
|
||||
#if defined(BSP_USING_DAC0)
|
||||
#ifndef DAC_CONFIG
|
||||
#define DAC_CONFIG \
|
||||
{ \
|
||||
.channels = DAC_CHANNEL_0, \
|
||||
.sample_freq = DAC_SAMPLE_FREQ_500KHZ, \
|
||||
.vref = DAC_VREF_INTERNAL, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_UART0)
|
||||
#ifndef UART0_CONFIG
|
||||
#define UART0_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.baudrate = 2000000, \
|
||||
.databits = UART_DATA_LEN_8, \
|
||||
.stopbits = UART_STOP_ONE, \
|
||||
.parity = UART_PAR_NONE, \
|
||||
.fifo_threshold = 0, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_UART1)
|
||||
#ifndef UART1_CONFIG
|
||||
#define UART1_CONFIG \
|
||||
{ \
|
||||
.id = 1, \
|
||||
.baudrate = 2000000, \
|
||||
.databits = UART_DATA_LEN_8, \
|
||||
.stopbits = UART_STOP_ONE, \
|
||||
.parity = UART_PAR_NONE, \
|
||||
.fifo_threshold = 63, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH0)
|
||||
#ifndef DMA0_CH0_CONFIG
|
||||
#define DMA0_CH0_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 0, \
|
||||
.direction = DMA_MEMORY_TO_MEMORY, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_NONE, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_32BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_32BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH1)
|
||||
#ifndef DMA0_CH1_CONFIG
|
||||
#define DMA0_CH1_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 1, \
|
||||
.direction = DMA_MEMORY_TO_MEMORY, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_NONE, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH2)
|
||||
#ifndef DMA0_CH2_CONFIG
|
||||
#define DMA0_CH2_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 2, \
|
||||
.direction = DMA_MEMORY_TO_PERIPH, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_UART1_TX, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH3)
|
||||
#ifndef DMA0_CH3_CONFIG
|
||||
#define DMA0_CH3_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 3, \
|
||||
.direction = DMA_MEMORY_TO_PERIPH, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_SPI0_TX, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH4)
|
||||
#ifndef DMA0_CH4_CONFIG
|
||||
#define DMA0_CH4_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 4, \
|
||||
.direction = DMA_PERIPH_TO_MEMORY, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_SPI0_RX, \
|
||||
.dst_req = DMA_REQUEST_NONE, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_8BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH5)
|
||||
#ifndef DMA0_CH5_CONFIG
|
||||
#define DMA0_CH5_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 5, \
|
||||
.direction = DMA_MEMORY_TO_PERIPH, \
|
||||
.transfer_mode = DMA_LLI_CYCLE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_I2S_TX, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH6)
|
||||
#ifndef DMA0_CH6_CONFIG
|
||||
#define DMA0_CH6_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 6, \
|
||||
.direction = DMA_MEMORY_TO_PERIPH, \
|
||||
.transfer_mode = DMA_LLI_CYCLE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_I2S_TX, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_DISABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_16BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if defined(BSP_USING_DMA0_CH7)
|
||||
#ifndef DMA0_CH7_CONFIG
|
||||
#define DMA0_CH7_CONFIG \
|
||||
{ \
|
||||
.id = 0, \
|
||||
.ch = 7, \
|
||||
.direction = DMA_MEMORY_TO_MEMORY, \
|
||||
.transfer_mode = DMA_LLI_ONCE_MODE, \
|
||||
.src_req = DMA_REQUEST_NONE, \
|
||||
.dst_req = DMA_REQUEST_NONE, \
|
||||
.src_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.dst_addr_inc = DMA_ADDR_INCREMENT_ENABLE, \
|
||||
.src_burst_size = DMA_BURST_1BYTE, \
|
||||
.dst_burst_size = DMA_BURST_1BYTE, \
|
||||
.src_width = DMA_TRANSFER_WIDTH_32BIT, \
|
||||
.dst_width = DMA_TRANSFER_WIDTH_32BIT, \
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
144
source/Core/BSP/Magic/pinmux_config.h
Normal file
144
source/Core/BSP/Magic/pinmux_config.h
Normal file
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* @file pinmux_config.h
|
||||
* @brief
|
||||
*
|
||||
* Copyright (c) 2021 Bouffalolab team
|
||||
*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership. The
|
||||
* ASF licenses this file to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance with the
|
||||
* License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
* License for the specific language governing permissions and limitations
|
||||
* under the License.
|
||||
*
|
||||
*/
|
||||
#ifndef _PINMUX_CONFIG_H
|
||||
#define _PINMUX_CONFIG_H
|
||||
|
||||
// <<< Use Configuration Wizard in Context Menu >>>
|
||||
|
||||
// <q> GPIO0 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio0 function
|
||||
#define CONFIG_GPIO0_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO1 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_CTS//GPIO_FUN_UART1_CTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio1 function
|
||||
#define CONFIG_GPIO1_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO2 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_TX//GPIO_FUN_UART1_TX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio2 function
|
||||
#define CONFIG_GPIO2_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO3 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RX//GPIO_FUN_UART1_RX//GPIO_FUN_QDEC]
|
||||
// <i> config gpio3 function
|
||||
#define CONFIG_GPIO3_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO4 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio4 function
|
||||
#define CONFIG_GPIO4_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO5 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_CTS//GPIO_FUN_UART1_CTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio5 function
|
||||
#define CONFIG_GPIO5_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO6 <2> [GPIO_FUN_UNUSED//GPIO_FUN_CLK_OUT//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_TX//GPIO_FUN_UART1_TX//GPIO_FUN_QDEC]
|
||||
// <i> config gpio6 function
|
||||
#define CONFIG_GPIO6_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO7 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_USB//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RX//GPIO_FUN_UART1_RX//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio7 function
|
||||
#define CONFIG_GPIO7_FUNC GPIO_FUN_UART0_RX
|
||||
|
||||
// <q> GPIO8 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_USB//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio8 function
|
||||
#define CONFIG_GPIO8_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO9 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio9 function
|
||||
#define CONFIG_GPIO9_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO10 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio10 function
|
||||
#define CONFIG_GPIO10_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO11 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio11 function
|
||||
#define CONFIG_GPIO11_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO12 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio12 function
|
||||
#define CONFIG_GPIO12_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO13 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio13 function
|
||||
#define CONFIG_GPIO13_FUNC GPIO_FUN_ANALOG
|
||||
|
||||
// <q> GPIO14 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio14 function
|
||||
#define CONFIG_GPIO14_FUNC GPIO_FUN_ANALOG
|
||||
|
||||
// <q> GPIO15 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio15 function
|
||||
#define CONFIG_GPIO15_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO16 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio16 function
|
||||
#define CONFIG_GPIO16_FUNC GPIO_FUN_UART0_TX
|
||||
|
||||
// <q> GPIO17 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio17 function
|
||||
#define CONFIG_GPIO17_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO18 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio18 function
|
||||
#define CONFIG_GPIO18_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO19 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio19 function
|
||||
#define CONFIG_GPIO19_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO20 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio20 function
|
||||
#define CONFIG_GPIO20_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO21 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio21 function
|
||||
#define CONFIG_GPIO21_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO22 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio22 function
|
||||
#define CONFIG_GPIO22_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO23 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_ANALOG//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_QDEC]
|
||||
// <i> config gpio23 function
|
||||
#define CONFIG_GPIO23_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO24 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio24 function
|
||||
#define CONFIG_GPIO24_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO25 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio25 function
|
||||
#define CONFIG_GPIO25_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO26 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio26 function
|
||||
#define CONFIG_GPIO26_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO27 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio27 function
|
||||
#define CONFIG_GPIO27_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
// <q> GPIO28 <2> [GPIO_FUN_UNUSED//GPIO_FUN_I2S//GPIO_FUN_SPI//GPIO_FUN_I2C//GPIO_FUN_PWM//GPIO_FUN_CAM//GPIO_FUN_UART0_RTS//GPIO_FUN_UART1_RTS//GPIO_FUN_ETHER_MAC//GPIO_FUN_QDEC]
|
||||
// <i> config gpio28 function
|
||||
#define CONFIG_GPIO28_FUNC GPIO_FUN_UNUSED
|
||||
|
||||
#endif
|
||||
@@ -12,10 +12,10 @@
|
||||
#include <I2C_Wrapper.hpp>
|
||||
void preRToSInit() {
|
||||
// Normal system bringup -- GPIO etc
|
||||
|
||||
// #TODO
|
||||
hardware_init();
|
||||
gpio_bit_reset(OLED_RESET_GPIO_Port, OLED_RESET_Pin);
|
||||
// gpio_bit_reset(OLED_RESET_GPIO_Port, OLED_RESET_Pin);
|
||||
delay_ms(5);
|
||||
gpio_bit_set(OLED_RESET_GPIO_Port, OLED_RESET_Pin);
|
||||
// gpio_bit_set(OLED_RESET_GPIO_Port, OLED_RESET_Pin);
|
||||
FRToSI2C::FRToSInit();
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ void vApplicationGetIdleTaskMemory(StaticTask_t **ppxIdleTaskTCBBuffer, StackTyp
|
||||
/* place for user code */
|
||||
}
|
||||
|
||||
void vApplicationStackOverflowHook(TaskHandle_t *pxTask, signed portCHAR *pcTaskName) {
|
||||
void vApplicationStackOverflowHook(TaskHandle_t *pxTask, signed char *pcTaskName) {
|
||||
(void)pxTask;
|
||||
(void)pcTaskName;
|
||||
|
||||
|
||||
266
source/Makefile
266
source/Makefile
@@ -3,9 +3,10 @@ model:=TS100
|
||||
endif
|
||||
|
||||
ALL_MINIWARE_MODELS=TS100 TS80 TS80P
|
||||
ALL_PINE_MODELS=Pinecil
|
||||
PINECIL_MODELS=Pinecil
|
||||
ALL_MAGIC_MODELS=Magic
|
||||
ALL_MHP30_MODELS=MHP30
|
||||
ALL_MODELS=$(ALL_MINIWARE_MODELS) $(ALL_PINE_MODELS) $(ALL_MHP30_MODELS)
|
||||
ALL_MODELS=$(ALL_MINIWARE_MODELS) $(PINECIL_MODELS) $(ALL_MHP30_MODELS) $(ALL_MAGIC_MODELS)
|
||||
ifneq ($(model),$(filter $(model),$(ALL_MODELS)))
|
||||
$(error Invalid model '$(model)', valid options are: $(ALL_MODELS))
|
||||
endif
|
||||
@@ -70,6 +71,57 @@ PINE_VENDOR_USB_INC_DIR = ./Core/BSP/Pine64/Vendor/SoC/gd32vf103/Common/Include/
|
||||
PINE_NMSIS_INC_DIR = ./Core/BSP/Pine64/Vendor/NMSIS/Core/Include
|
||||
PINE_FREERTOS_PORT_INC_DIR = ./Core/BSP/Pine64/Vendor/OS/FreeRTOS/Source/portable/GCC
|
||||
|
||||
MAGIC_DIR = ./Core/BSP/Magic
|
||||
MAGIC_SDK_DIR = $(MAGIC_DIR)/bl_mcu_sdk
|
||||
MAGIC_VENDOR_BSP_COMMON_DIR = $(MAGIC_SDK_DIR)/bsp/bsp_common
|
||||
|
||||
MAGIC_VENDOR_EXAMPLES_DIR = $(MAGIC_SDK_DIR)/examples
|
||||
MAGIC_COMMON_DIR = $(MAGIC_SDK_DIR)/common
|
||||
MAGIC_COMMON_BL_MATH_DIR = $(MAGIC_COMMON_DIR)/bl_math
|
||||
MAGIC_COMMON_DEVICE_DIR = $(MAGIC_COMMON_DIR)/device
|
||||
MAGIC_COMMON_LIST_DIR = $(MAGIC_COMMON_DIR)/list
|
||||
MAGIC_COMMON_MEMHEAP_DIR = $(MAGIC_COMMON_DIR)/memheap
|
||||
MAGIC_COMMON_MISC_DIR = $(MAGIC_COMMON_DIR)/misc
|
||||
MAGIC_COMMON_PARTITION_DIR = $(MAGIC_COMMON_DIR)/partition
|
||||
MAGIC_COMMON_PID_DIR = $(MAGIC_COMMON_DIR)/pid
|
||||
MAGIC_COMMON_RING_BUFFERDIR = $(MAGIC_COMMON_DIR)/ring_buffer
|
||||
MAGIC_COMMON_SOFT_CRC_DIR = $(MAGIC_COMMON_DIR)/soft_crc
|
||||
MAGIC_COMMON_TIMESTAMP_DIR = $(MAGIC_COMMON_DIR)/timestamp
|
||||
MAGIC_COMPONENTS_DIR = $(MAGIC_SDK_DIR)/components
|
||||
MAGIC_COMPONENTS_BLE_DIR = $(MAGIC_COMPONENTS_DIR)/ble
|
||||
MAGIC_COMPONENTS_FATFS_DIR = $(MAGIC_COMPONENTS_DIR)/fatfs
|
||||
|
||||
MAGIC_COMPONENTS_FREERTOS_DIR = $(MAGIC_COMPONENTS_DIR)/freertos
|
||||
MAGIC_COMPONENTS_FREERTOS_BL602_DIR = $(MAGIC_COMPONENTS_FREERTOS_DIR)/portable/gcc/risc-v/bl602
|
||||
MAGIC_COMPONENTS_FREERTOS_INC_DIR = $(MAGIC_COMPONENTS_FREERTOS_DIR)/include
|
||||
|
||||
|
||||
MAGIC_COMPONENTS_LVGL_DIR = $(MAGIC_COMPONENTS_DIR)/lvgl
|
||||
MAGIC_COMPONENTS_LWIP_DIR = $(MAGIC_COMPONENTS_DIR)/lwip
|
||||
MAGIC_COMPONENTS_MAC154_DIR = $(MAGIC_COMPONENTS_DIR)/mac154
|
||||
MAGIC_COMPONENTS_MBEDTLS_DIR = $(MAGIC_COMPONENTS_DIR)/mbedtls
|
||||
MAGIC_COMPONENTS_NMSIS_DIR = $(MAGIC_COMPONENTS_DIR)/nmsis
|
||||
MAGIC_COMPONENTS_PIKASCRIPT_DIR = $(MAGIC_COMPONENTS_DIR)/pikascript
|
||||
MAGIC_COMPONENTS_ROMFS_DIR = $(MAGIC_COMPONENTS_DIR)/romfs
|
||||
# Excluded
|
||||
MAGIC_COMPONENTS_RT_THREAD_DIR = $(MAGIC_COMPONENTS_DIR)/rt-thread
|
||||
|
||||
MAGIC_COMPONENTS_SHELL_DIR = $(MAGIC_COMPONENTS_DIR)/shell
|
||||
MAGIC_COMPONENTS_TFLITE_DIR = $(MAGIC_COMPONENTS_DIR)/tflite
|
||||
MAGIC_COMPONENTS_TINY_JPEG_DIR = $(MAGIC_COMPONENTS_DIR)/tiny_jpeg
|
||||
MAGIC_COMPONENTS_USB_STACK_DIR = $(MAGIC_COMPONENTS_DIR)/usb_stack
|
||||
MAGIC_COMPONENTS_XZ_DIR = $(MAGIC_COMPONENTS_DIR)/xz
|
||||
MAGIC_DRIVERS_DIR = $(MAGIC_SDK_DIR)/drivers/bl602_driver
|
||||
MAGIC_DRIVERS_HAL_DRV_INC_DIR = $(MAGIC_DRIVERS_DIR)/hal_drv/inc
|
||||
MAGIC_DRIVERS_HAL_DRV_DEF_DIR = $(MAGIC_DRIVERS_DIR)/hal_drv/default_config
|
||||
MAGIC_DRIVERS_REGS_DIR = $(MAGIC_DRIVERS_DIR)/regs
|
||||
MAGIC_DRIVERS_RISCV_DIR = $(MAGIC_DRIVERS_DIR)/risc-v
|
||||
MAGIC_DRIVERS_STARTUP_DIR = $(MAGIC_DRIVERS_DIR)/startup
|
||||
MAGIC_DRIVERS_STD_DRV_DIR = $(MAGIC_DRIVERS_DIR)/std_drv/inc
|
||||
|
||||
|
||||
|
||||
|
||||
SOURCE_MIDDLEWARES_DIR = ./Middlewares
|
||||
FRTOS_CMIS_INC_DIR = ./Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS
|
||||
FRTOS_INC_DIR = ./Middlewares/Third_Party/FreeRTOS/Source/include
|
||||
@@ -84,86 +136,155 @@ SOURCE_DRIVERS_DIR = ./Core/Drivers
|
||||
INC_PD_DRIVERS_DIR = ./Core/Drivers/usb-pd/include
|
||||
PD_DRIVER_TESTS_DIR = ./Core/Drivers/usb-pd/tests
|
||||
PD_DRIVER_DIR = ./Core/Drivers/usb-pd
|
||||
# Find-all's used for formatting
|
||||
|
||||
ALL_INCLUDES = $(shell find ./Core -type d \( -path $(BRIEFLZ_INC_DIR) -o -path $(PD_DRIVER_DIR) \) -prune -false -o \( -type f \( -name '*.h' -o -name '*.hpp' \) \) )
|
||||
ALL_SOURCE = $(shell find ./Core -type d \( -path $(SOURCE_BRIEFLZ_DIR) -o -path $(PD_DRIVER_DIR) \) -prune -false -o \( -type f \( -name '*.c' -o -name '*.cpp' \) \) )
|
||||
|
||||
# Find-all's used for formatting; have to exclude external modules
|
||||
|
||||
ALL_INCLUDES = $(shell find ./Core -type d \( -path $(BRIEFLZ_INC_DIR) -o -path $(PD_DRIVER_DIR) -o -path $(MAGIC_SDK_DIR) \) -prune -false -o \( -type f \( -name '*.h' -o -name '*.hpp' \) \) )
|
||||
ALL_SOURCE = $(shell find ./Core -type d \( -path $(SOURCE_BRIEFLZ_DIR) -o -path $(PD_DRIVER_DIR) -o -path $(MAGIC_SDK_DIR) \) -prune -false -o \( -type f \( -name '*.c' -o -name '*.cpp' \) \) )
|
||||
|
||||
# Device dependent settings
|
||||
ifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS)))
|
||||
$(info Building for Miniware )
|
||||
DEVICE_INCLUDES = -I$(MINIWARE_INC_DIR) \
|
||||
-I$(MINIWARE_INC_CMSIS_DEVICE)\
|
||||
-I$(MINIWARE_CMSIS_CORE_INC_DIR) \
|
||||
-I$(MINIWARE_HAL_INC_DIR) \
|
||||
-I$(MINIWARE_HAL_LEGACY_INC_DIR)
|
||||
DEVICE_BSP_DIR = ./Core/BSP/Miniware
|
||||
S_SRCS := $(shell find $(MINIWARE_STARTUP_DIR) -type f -name '*.S')
|
||||
LDSCRIPT=$(MINIWARE_LD_FILE)
|
||||
DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \
|
||||
-D ARM_MATH_CM3 \
|
||||
-D STM32F10X_MD
|
||||
DEV_LDFLAGS=
|
||||
DEV_AFLAGS=
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
CPUFLAGS= -mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-mfloat-abi=soft
|
||||
flash_size=64k
|
||||
bootldr_size=0x4000
|
||||
DEVICE_DFU_ADDRESS=0x08004000
|
||||
DEVICE_DFU_VID_PID=0x1209:0xDB42
|
||||
$(info Building for Miniware )
|
||||
DEVICE_INCLUDES = -I$(MINIWARE_INC_DIR) \
|
||||
-I$(MINIWARE_INC_CMSIS_DEVICE)\
|
||||
-I$(MINIWARE_CMSIS_CORE_INC_DIR) \
|
||||
-I$(MINIWARE_HAL_INC_DIR) \
|
||||
-I$(MINIWARE_HAL_LEGACY_INC_DIR)
|
||||
DEVICE_BSP_DIR = ./Core/BSP/Miniware
|
||||
S_SRCS := $(shell find $(MINIWARE_STARTUP_DIR) -type f -name '*.S')
|
||||
LDSCRIPT=$(MINIWARE_LD_FILE)
|
||||
DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \
|
||||
-D ARM_MATH_CM3 \
|
||||
-D STM32F10X_MD
|
||||
DEV_LDFLAGS=
|
||||
DEV_AFLAGS=
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
CPUFLAGS= -mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-mfloat-abi=soft
|
||||
flash_size=64k
|
||||
bootldr_size=0x4000
|
||||
DEVICE_DFU_ADDRESS=0x08004000
|
||||
DEVICE_DFU_VID_PID=0x1209:0xDB42
|
||||
endif
|
||||
|
||||
ifeq ($(model),$(filter $(model),$(ALL_MHP30_MODELS)))
|
||||
$(info Building for MHP30 )
|
||||
DEVICE_INCLUDES = -I$(MHP30_INC_DIR) \
|
||||
-I$(MHP30_INC_CMSIS_DEVICE)\
|
||||
-I$(MHP30_CMSIS_CORE_INC_DIR) \
|
||||
-I$(MHP30_HAL_INC_DIR) \
|
||||
-I$(MHP30_HAL_LEGACY_INC_DIR)
|
||||
DEVICE_BSP_DIR = ./Core/BSP/MHP30
|
||||
S_SRCS := $(shell find $(MHP30_STARTUP_DIR) -type f -name '*.S')
|
||||
LDSCRIPT=$(MHP30_LD_FILE)
|
||||
DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \
|
||||
-D ARM_MATH_CM3 \
|
||||
-D STM32F10X_MD
|
||||
DEV_LDFLAGS=
|
||||
DEV_AFLAGS=
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
CPUFLAGS= -mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-mfloat-abi=soft
|
||||
flash_size=128k
|
||||
bootldr_size=32k
|
||||
DEVICE_DFU_ADDRESS=0x08008000
|
||||
DEVICE_DFU_VID_PID=0x1209:0xDB42
|
||||
$(info Building for MHP30 )
|
||||
DEVICE_INCLUDES = -I$(MHP30_INC_DIR) \
|
||||
-I$(MHP30_INC_CMSIS_DEVICE)\
|
||||
-I$(MHP30_CMSIS_CORE_INC_DIR) \
|
||||
-I$(MHP30_HAL_INC_DIR) \
|
||||
-I$(MHP30_HAL_LEGACY_INC_DIR)
|
||||
DEVICE_BSP_DIR = ./Core/BSP/MHP30
|
||||
S_SRCS := $(shell find $(MHP30_STARTUP_DIR) -type f -name '*.S')
|
||||
LDSCRIPT=$(MHP30_LD_FILE)
|
||||
DEV_GLOBAL_DEFS= -D STM32F103T8Ux -D STM32F1 -D STM32 -D USE_HAL_DRIVER -D STM32F103xB -D USE_RTOS_SYSTICK -D GCC_ARMCM3 \
|
||||
-D ARM_MATH_CM3 \
|
||||
-D STM32F10X_MD
|
||||
DEV_LDFLAGS=
|
||||
DEV_AFLAGS=
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
CPUFLAGS= -mcpu=cortex-m3 \
|
||||
-mthumb \
|
||||
-mfloat-abi=soft
|
||||
flash_size=128k
|
||||
bootldr_size=32k
|
||||
DEVICE_DFU_ADDRESS=0x08008000
|
||||
DEVICE_DFU_VID_PID=0x1209:0xDB42
|
||||
endif
|
||||
|
||||
|
||||
ifeq ($(model),$(ALL_PINE_MODELS))
|
||||
$(info Building for Pine64 )
|
||||
DEVICE_INCLUDES = -I$(PINE_INC_DIR) \
|
||||
-I$(PINE_VENDOR_INC_DIR) \
|
||||
-I$(PINE_VENDOR_USB_INC_DIR) \
|
||||
-I$(PINE_NMSIS_INC_DIR) \
|
||||
-I$(PINE_FREERTOS_PORT_INC_DIR)
|
||||
|
||||
DEVICE_BSP_DIR = ./Core/BSP/Pine64
|
||||
S_SRCS := $(shell find $(PINE_INC_DIR) -type f -name '*.S') $(info $(S_SRCS) )
|
||||
ASM_INC = -I$(PINE_RISCV_INC_DIR)
|
||||
LDSCRIPT=./Core/BSP/Pine64/Vendor/SoC/gd32vf103/Board/pinecil/Source/GCC/gcc_gd32vf103_flashxip.ld
|
||||
flash_size=128k
|
||||
bootldr_size=0x0
|
||||
ifeq ($(model),$(PINECIL_MODELS))
|
||||
$(info Building for Pine64 )
|
||||
DEVICE_INCLUDES = -I$(PINE_INC_DIR) \
|
||||
-I$(PINE_VENDOR_INC_DIR) \
|
||||
-I$(PINE_VENDOR_USB_INC_DIR) \
|
||||
-I$(PINE_NMSIS_INC_DIR) \
|
||||
-I$(PINE_FREERTOS_PORT_INC_DIR)
|
||||
|
||||
DEVICE_BSP_DIR = ./Core/BSP/Pine64
|
||||
S_SRCS := $(shell find $(PINE_INC_DIR) -type f -name '*.S') $(info $(S_SRCS) )
|
||||
ASM_INC = -I$(PINE_RISCV_INC_DIR)
|
||||
LDSCRIPT=./Core/BSP/Pine64/Vendor/SoC/gd32vf103/Board/pinecil/Source/GCC/gcc_gd32vf103_flashxip.ld
|
||||
flash_size=128k
|
||||
bootldr_size=0x0
|
||||
# Flags
|
||||
CPUFLAGS= -march=rv32imac \
|
||||
-mabi=ilp32 \
|
||||
-mcmodel=medany -fsigned-char -fno-builtin -nostartfiles
|
||||
DEV_LDFLAGS=-nostartfiles --specs=patch.specs
|
||||
DEV_AFLAGS=
|
||||
DEV_GLOBAL_DEFS= -DRTOS_FREERTOS -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
endif
|
||||
|
||||
|
||||
|
||||
|
||||
ifeq ($(model),$(ALL_MAGIC_MODELS))
|
||||
$(info Building for Magic ~~~~~ ^^__^^ )
|
||||
|
||||
|
||||
|
||||
DEVICE_INCLUDES = -I$(MAGIC_DIR) \
|
||||
-I$(MAGIC_SDK_DIR) \
|
||||
-I$(MAGIC_VENDOR_BSP_COMMON_DIR) \
|
||||
-I$(MAGIC_VENDOR_EXAMPLES_DIR) \
|
||||
-I$(MAGIC_COMMON_DIR) \
|
||||
-I$(MAGIC_COMMON_BL_MATH_DIR) \
|
||||
-I$(MAGIC_COMMON_DEVICE_DIR) \
|
||||
-I$(MAGIC_COMMON_LIST_DIR) \
|
||||
-I$(MAGIC_COMMON_MEMHEAP_DIR) \
|
||||
-I$(MAGIC_COMMON_MISC_DIR) \
|
||||
-I$(MAGIC_COMMON_PARTITION_DIR) \
|
||||
-I$(MAGIC_COMMON_PID_DIR) \
|
||||
-I$(MAGIC_COMMON_RING_BUFFERDIR) \
|
||||
-I$(MAGIC_COMMON_SOFT_CRC_DIR) \
|
||||
-I$(MAGIC_COMMON_TIMESTAMP_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_BLE_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_FATFS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_FREERTOS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_FREERTOS_BL602_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_FREERTOS_INC_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_LVGL_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_LWIP_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_MAC154_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_MBEDTLS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_NMSIS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_PIKASCRIPT_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_ROMFS_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_SHELL_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_TFLITE_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_TINY_JPEG_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_USB_STACK_DIR) \
|
||||
-I$(MAGIC_COMPONENTS_XZ_DIR) \
|
||||
-I$(MAGIC_DRIVERS_DIR) \
|
||||
-I$(MAGIC_DRIVERS_HAL_DRV_INC_DIR) \
|
||||
-I$(MAGIC_DRIVERS_HAL_DRV_DEF_DIR) \
|
||||
-I$(MAGIC_DRIVERS_REGS_DIR) \
|
||||
-I$(MAGIC_DRIVERS_RISCV_DIR) \
|
||||
-I$(MAGIC_DRIVERS_STARTUP_DIR) \
|
||||
-I$(MAGIC_DRIVERS_STD_DRV_DIR)
|
||||
|
||||
|
||||
DEVICE_BSP_DIR = ./Core/BSP/Magic
|
||||
S_SRCS := $(shell find $(MAGIC_DIR) -type d \( -path $(MAGIC_VENDOR_EXAMPLES_DIR) -o -path $(MAGIC_COMPONENTS_RT_THREAD_DIR) -o -path $(MAGIC_VENDOR_BSP_COMMON_DIR) \) -prune -false -o -type f -name '*.S') $(info $(S_SRCS) )
|
||||
ASM_INC = $(DEVICE_INCLUDES)
|
||||
LDSCRIPT=./Core/BSP/Magic/bl_mcu_sdk/drivers/bl602_driver/bl602_flash.ld
|
||||
|
||||
# Flags
|
||||
CPUFLAGS= -march=rv32imac \
|
||||
-mabi=ilp32 \
|
||||
-mcmodel=medany -fsigned-char -fno-builtin -nostartfiles
|
||||
CPUFLAGS= -march=rv32imafc \
|
||||
-mabi=ilp32f \
|
||||
-mcmodel=medany -fsigned-char -fno-builtin -nostartfiles \
|
||||
-DportasmHANDLE_INTERRUPT=FreeRTOS_Interrupt_Handler
|
||||
DEV_LDFLAGS=-nostartfiles --specs=patch.specs
|
||||
DEV_AFLAGS=
|
||||
DEV_GLOBAL_DEFS= -DRTOS_FREERTOS -DDOWNLOAD_MODE=DOWNLOAD_MODE_FLASHXIP
|
||||
DEV_GLOBAL_DEFS=
|
||||
DEV_CFLAGS=
|
||||
DEV_CXXFLAGS=
|
||||
endif
|
||||
@@ -181,14 +302,14 @@ INCLUDES = -I$(APP_INC_DIR) \
|
||||
SOURCE := $(shell find $(SOURCE_THREADS_DIR) -type f -name '*.c') \
|
||||
$(shell find $(SOURCE_CORE_DIR) -type f -name '*.c') \
|
||||
$(shell find $(SOURCE_DRIVERS_DIR) -type f -name '*.c') \
|
||||
$(shell find $(DEVICE_BSP_DIR) -type f -name '*.c') \
|
||||
$(shell find $(DEVICE_BSP_DIR) -type d \( -path $(MAGIC_VENDOR_EXAMPLES_DIR) -o -path $(MAGIC_COMPONENTS_RT_THREAD_DIR) -o -path $(MAGIC_VENDOR_BSP_COMMON_DIR) \) -prune -false -o -type f -name '*.c')\
|
||||
$(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.c') \
|
||||
$(SOURCE_BRIEFLZ_DIR)/depack.c
|
||||
# We exclude the USB-PD stack tests $(PD_DRIVER_TESTS_DIR)
|
||||
SOURCE_CPP := $(shell find $(SOURCE_THREADS_DIR) -type f -name '*.cpp') \
|
||||
$(shell find $(SOURCE_CORE_DIR) -type f -name '*.cpp') \
|
||||
$(shell find $(SOURCE_DRIVERS_DIR) -path $(PD_DRIVER_TESTS_DIR) -prune -false -o -type f -name '*.cpp') \
|
||||
$(shell find $(DEVICE_BSP_DIR) -type f -name '*.cpp') \
|
||||
$(shell find $(DEVICE_BSP_DIR) -type d \( -path $(MAGIC_VENDOR_EXAMPLES_DIR) -o -path $(MAGIC_COMPONENTS_RT_THREAD_DIR) -o -path $(MAGIC_VENDOR_BSP_COMMON_DIR) \) -prune -false -o -type f -name '*.cpp') \
|
||||
$(shell find $(SOURCE_MIDDLEWARES_DIR) -type f -name '*.cpp')
|
||||
|
||||
# code optimisation ------------------------------------------------------------
|
||||
@@ -215,7 +336,7 @@ COMPILER=gcc
|
||||
ifeq ($(model),$(filter $(model),$(ALL_MINIWARE_MODELS) $(ALL_MHP30_MODELS)))
|
||||
COMPILER_PREFIX=arm-none-eabi
|
||||
endif
|
||||
ifeq ($(model),$(ALL_PINE_MODELS))
|
||||
ifeq ($(model),$(filter $(model),$(PINECIL_MODELS) $(ALL_MAGIC_MODELS)))
|
||||
COMPILER_PREFIX=riscv-none-elf
|
||||
endif
|
||||
# programs ---------------------------------------------------------------------
|
||||
@@ -396,6 +517,7 @@ $(HEXFILE_DIR)/$(model)_font_compressed_%.elf : \
|
||||
$(OUT_OBJS): $(OUTPUT_DIR)/%.o : %.c Makefile
|
||||
@test -d $(@D) || mkdir -p $(@D)
|
||||
@echo Compiling ${<}
|
||||
@echo $(CFLAGS)
|
||||
@$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(OUTPUT_DIR)/%.o : %.cpp Makefile
|
||||
|
||||
Reference in New Issue
Block a user