Continued work on MAX5715. MACRO functions are done, mostly tested in logic analyzer. SPI unable to work with hardware SS, so software SS is used instead
Added UART3 on PB10/PB11 for terminal (future use) git-svn-id: https://svn.vbchaos.nl/svn/hsb/trunk@225 05563f52-14a8-4384-a975-3d1654cca0fa
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
<option defaultValue="gnu.c.optimization.level.none" id="gnu.c.compiler.option.optimization.level.1239482633" name="Optimization Level" superClass="gnu.c.compiler.option.optimization.level" useByScannerDiscovery="false" valueType="enumerated"/>
|
||||
<option id="gnu.c.compiler.option.debugging.level.1951365338" name="Debug Level" superClass="gnu.c.compiler.option.debugging.level" useByScannerDiscovery="false" value="gnu.c.debugging.level.max" valueType="enumerated"/>
|
||||
<option id="gnu.c.compiler.option.include.paths.35161744" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/STM32F10x_StdPeriph_Driver/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/hsb-mrts/inc}""/>
|
||||
<listOptionValue builtIn="false" value=""${workspace_loc:/STM32F10x_StdPeriph_Lib_V3.5.0/Libraries/CMSIS/CM3/DeviceSupport/ST/STM32F10x}""/>
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1404919128665" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-103770239591" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
@@ -16,7 +16,7 @@
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="1404919128665" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="org.eclipse.cdt.internal.build.crossgcc.CrossGCCBuiltinSpecsDetector" console="false" env-hash="-103770239591" id="org.eclipse.cdt.build.crossgcc.CrossGCCBuiltinSpecsDetector" keep-relative-paths="false" name="CDT Cross GCC Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
||||
@@ -32,15 +32,31 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#include "IODevice.h"
|
||||
#include "spi.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Constant and macro definitions
|
||||
// -----------------------------------------------------------------------------
|
||||
#define MAX5715_NUMBER_OF_DACS (4)
|
||||
|
||||
#define MAX5715_SEL_DACA (0x0)
|
||||
#define MAX5715_SEL_DACB (0x1)
|
||||
#define MAX5715_SEL_DACC (0x2)
|
||||
#define MAX5715_SEL_DACD (0x4)
|
||||
#define MAX5715_SPI_MAX_CLK_HZ (50000000)
|
||||
// SPI settings
|
||||
#define MAX5715_SPI_Direction (SPI_Direction_1Line_Tx)
|
||||
#define MAX5715_SPI_Mode (SPI_Mode_Master)
|
||||
#define MAX5715_SPI_DataSize (SPI_DataSize_8b)
|
||||
#define MAX5715_SPI_CPOL (SPI_CPOL_Low)
|
||||
#define MAX5715_SPI_CPHA (SPI_CPHA_1Edge)
|
||||
#define MAX5715_SPI_NSS (SPI_NSS_Soft)
|
||||
#define MAX5715_SPI_NSS_INTERNAL (SPI_NSSInternalSoft_Reset)
|
||||
#define MAX5715_SPI_FirstBit (SPI_FirstBit_MSB)
|
||||
#define MAX5715_SPI_CRCPolynomial (7)
|
||||
#define MAX5715_SPI_RX_QUEUE (1)
|
||||
#define MAX5715_SPI_TX_QUEUE (32)
|
||||
|
||||
#define MAX5715_SEL_DACA (0x1)
|
||||
#define MAX5715_SEL_DACB (0x2)
|
||||
#define MAX5715_SEL_DACC (0x4)
|
||||
#define MAX5715_SEL_DACD (0x8)
|
||||
|
||||
#define MAX5715_CMD_CODEn (0x00)
|
||||
#define MAX5715_CMD_LOADn (0x10)
|
||||
@@ -66,11 +82,51 @@
|
||||
#define MAX5715_CMD_LOAD_ALL (0x81)
|
||||
#define MAX5715_CMD_CODE_ALL_LOAD_ALL (0x82)
|
||||
|
||||
|
||||
#define MAX5715_writeCODEn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn | (0x0F & DAC)), DATA))
|
||||
#define MAX5715_writeLOADn(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_LOADn | (0x0F & DAC)), 0x0000))
|
||||
#define MAX5715_writeCODEnLOADALL(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOAD_ALL | (0x0F & DAC)), DATA))
|
||||
#define MAX5715_writeCODEnLOADn(self, DAC, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODEn_LOADn | (0x0F & DAC)), DATA))
|
||||
|
||||
#define MAX5715_writePOWER_NORMAL(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_NORMAL), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writePOWER_PD1K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD1K), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writePOWER_PD100K(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_PD100K), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writePOWER_HIGHZ(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_POWER_HIGHZ), (0x00FF & (DAC << 4))))
|
||||
|
||||
#define MAX5715_writeSW_CLEAR(self) (MAX5715_sendCommand(self, (MAX5715_CMD_SW_CLEAR), 0x0000))
|
||||
#define MAX5715_writeSW_RESET(self) (MAX5715_sendCommand(self, (MAX5715_CMD_SW_RESET), 0x0000))
|
||||
|
||||
#define MAX5715_writeCONFIG_LATCH_ON(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_ON), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeCONFIG_LATCH_OFF(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_CONFIG_LATCH_OFF), (0x00FF & (DAC << 4))))
|
||||
|
||||
#define MAX5715_writeREF_DAC_EXT(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_EXT), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_DAC_2V5(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V5), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_DAC_2V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_2V0), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_DAC_4V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_DAC_4V0), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_ON_EXT(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_EXT), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_ON_2V5(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V5), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_ON_2V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_2V0), (0x00FF & (DAC << 4))))
|
||||
#define MAX5715_writeREF_ON_4V0(self, DAC) (MAX5715_sendCommand(self, (MAX5715_CMD_REF_ON_4V0), (0x00FF & (DAC << 4))))
|
||||
|
||||
#define MAX5715_writeCODE_ALL(self, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODE_ALL), DATA))
|
||||
#define MAX5715_writeLOAD_ALL(self, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_LOAD_ALL), 0x0000))
|
||||
#define MAX5715_writeCODE_ALL_LOAD_ALL(self, DATA) (MAX5715_sendCommand(self, (MAX5715_CMD_CODE_ALL_LOAD_ALL), DATA))
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Type definitions.
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
struct MAX5715_DAC
|
||||
{
|
||||
uint8_t id;
|
||||
uint16_t value;
|
||||
};
|
||||
|
||||
struct MAX5715
|
||||
{
|
||||
const struct IODevice* device;
|
||||
struct MAX5715_DAC dac[MAX5715_NUMBER_OF_DACS];
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Function declarations
|
||||
@@ -79,15 +135,79 @@
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* MAX5715_construct
|
||||
* Description of function
|
||||
* Constructs the MAX5715 instance into argument self.
|
||||
*
|
||||
* @param self
|
||||
* @param self The MAX5715 object to initialize
|
||||
* @param device The IODevice that should be used for
|
||||
* communication with the MAX5715
|
||||
*
|
||||
* @return ErrorStatus
|
||||
* @return ErrorStatus SUCCESS if initialisation was successful
|
||||
* ERROR otherwise
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus MAX5715_construct(const struct IODevice* self, para2_name);
|
||||
extern ErrorStatus MAX5715_construct(struct MAX5715* self, const struct IODevice* device);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* MAX5715_destruct
|
||||
* Destructs the MAX5715 instance in argument self
|
||||
*
|
||||
* @param self
|
||||
*
|
||||
* @return ErrorStatus SUCCESS if initialisation was successful
|
||||
* ERROR otherwise
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern void MAX5715_destruct(struct MAX5715* self);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* MAX5715_getSpiParameters
|
||||
* Returns a filled-in struct SpiParameters with the MAX5715-specific parameters
|
||||
*
|
||||
* @param parameters SpiParameters struct to fill
|
||||
*
|
||||
* @return ErrorStatus SUCCESS if initialisation was successful
|
||||
* ERROR otherwise
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus MAX5715_getSpiParameters(struct SpiParameters* parameters);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* MAX5715_sendCommand
|
||||
* Sends a command to MAX5715 instance in argument self with the command in
|
||||
* argument command
|
||||
*
|
||||
* @param self The MAX5715 instance
|
||||
* @param command The command to be sent
|
||||
* @return ErrorStatus SUCCESS if initialisation was successful
|
||||
* ERROR otherwise
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus MAX5715_sendCommand(const struct MAX5715* self, uint8_t command, uint16_t data);
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* MAX5715DAC_setOutput
|
||||
* Sets the output of the DAC in argument self to the value given in argument
|
||||
* value
|
||||
*
|
||||
* @param self The DAC to use
|
||||
* @param value The value to set
|
||||
* @return ErrorStatus SUCCESS if initialisation was successful
|
||||
* ERROR otherwise
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus MAX5715DAC_setOutput(struct MAX5715_DAC self, uint16_t value);
|
||||
|
||||
#endif /* INC_MAX5715_H_ */
|
||||
|
||||
@@ -47,6 +47,7 @@
|
||||
#define NHD0420_SPI_CPOL (SPI_CPOL_High)
|
||||
#define NHD0420_SPI_CPHA (SPI_CPHA_2Edge)
|
||||
#define NHD0420_SPI_NSS (SPI_NSS_Soft)
|
||||
#define NHD0420_SPI_NSS_INTERNAL (SPI_NSSInternalSoft_Reset)
|
||||
#define NHD0420_SPI_FirstBit (SPI_FirstBit_MSB)
|
||||
#define NHD0420_SPI_CRCPolynomial (7)
|
||||
#define NHD0420_SPI_RX_QUEUE (32)
|
||||
@@ -115,7 +116,10 @@
|
||||
// Type definitions.
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
struct NHD0420
|
||||
{
|
||||
const struct IODevice* device;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Function declarations
|
||||
@@ -134,7 +138,7 @@
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_construct(const struct IODevice* const device);
|
||||
extern ErrorStatus NHD0420_construct(struct NHD0420* self, const struct IODevice* device);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -148,7 +152,7 @@ extern ErrorStatus NHD0420_construct(const struct IODevice* const device);
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern void NHD0420_destruct(const struct IODevice* self);
|
||||
extern void NHD0420_destruct(struct NHD0420* self);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -178,7 +182,7 @@ extern ErrorStatus NHD0420_getSpiParameters(struct SpiParameters* parameters);
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_setCursorToPosition(const struct IODevice* self, char row, char column);
|
||||
extern ErrorStatus NHD0420_setCursorToPosition(const struct NHD0420* self, char row, char column);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -195,7 +199,7 @@ extern ErrorStatus NHD0420_setCursorToPosition(const struct IODevice* self, char
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_setContrast(const struct IODevice* self, char contrast);
|
||||
extern ErrorStatus NHD0420_setContrast(const struct NHD0420* self, char contrast);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -212,7 +216,7 @@ extern ErrorStatus NHD0420_setContrast(const struct IODevice* self, char contras
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_setBacklightBrightness(const struct IODevice* self, char brightness);
|
||||
extern ErrorStatus NHD0420_setBacklightBrightness(const struct NHD0420* self, char brightness);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -237,7 +241,7 @@ extern ErrorStatus NHD0420_setBacklightBrightness(const struct IODevice* self, c
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_setRS232Baudrate(const struct IODevice* self, char baudrate);
|
||||
extern ErrorStatus NHD0420_setRS232Baudrate(const struct NHD0420* self, char baudrate);
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
@@ -263,7 +267,7 @@ extern ErrorStatus NHD0420_setRS232Baudrate(const struct IODevice* self, char ba
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_setI2CAddress(const struct IODevice* self, char address);
|
||||
extern ErrorStatus NHD0420_setI2CAddress(const struct NHD0420* self, char address);
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* NHD0420_SendCommand
|
||||
@@ -277,8 +281,8 @@ extern ErrorStatus NHD0420_setI2CAddress(const struct IODevice* self, char addre
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
extern ErrorStatus NHD0420_sendCommand(const struct IODevice* self, char command);
|
||||
extern ErrorStatus NHD0420_sendCommand(const struct NHD0420* self, char command);
|
||||
|
||||
extern ErrorStatus NHD0420_sendData(const struct IODevice* self, const char* buffer, size_t length);
|
||||
extern ErrorStatus NHD0420_sendData(const struct NHD0420* self, const char* buffer, size_t length);
|
||||
|
||||
#endif /* DISPLAY_INC_NHD0420_H_ */
|
||||
|
||||
@@ -25,7 +25,11 @@
|
||||
// Include files
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
#include "Logger.h"
|
||||
|
||||
#include "MAX5715.h"
|
||||
|
||||
#include "spi.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Constant and macro definitions
|
||||
@@ -53,3 +57,83 @@
|
||||
// -----------------------------------------------------------------------------
|
||||
// Function definitions
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
ErrorStatus MAX5715_construct(struct MAX5715* self, const struct IODevice* device)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
int loopCounter;
|
||||
if (self != NULL)
|
||||
{
|
||||
self->device = device;
|
||||
|
||||
for (loopCounter = 0; loopCounter < MAX5715_NUMBER_OF_DACS; loopCounter++)
|
||||
{
|
||||
self->dac[loopCounter].id = loopCounter;
|
||||
self->dac[loopCounter].value = 0x0000;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
||||
void MAX5715_destruct(struct MAX5715* self)
|
||||
{
|
||||
self->device = NULL;
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus MAX5715_getSpiParameters(struct SpiParameters* parameters)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
if ((configCPU_CLOCK_HZ / 2) < MAX5715_SPI_MAX_CLK_HZ)
|
||||
{
|
||||
parameters->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
|
||||
}
|
||||
else if ((configCPU_CLOCK_HZ / 4) < MAX5715_SPI_MAX_CLK_HZ)
|
||||
{
|
||||
parameters->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4;
|
||||
}
|
||||
else if ((configCPU_CLOCK_HZ / 8) < MAX5715_SPI_MAX_CLK_HZ)
|
||||
{
|
||||
parameters->SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
|
||||
}
|
||||
else
|
||||
{
|
||||
// The CPU clock is too high. The pre-scaler has a max of 256. A clock higher than 25,6 MHz
|
||||
// results in a SPI CLK higher than 100 kHz, which is the max of the display
|
||||
returnValue = ERROR;
|
||||
}
|
||||
|
||||
if (returnValue == SUCCESS)
|
||||
{
|
||||
// SPI pre-scaler was no problem - assign the remaining parameters
|
||||
parameters->SPI_CPHA = MAX5715_SPI_CPHA;
|
||||
parameters->SPI_CPOL = MAX5715_SPI_CPOL;
|
||||
parameters->SPI_CRCPolynomial = MAX5715_SPI_CRCPolynomial;
|
||||
parameters->SPI_DataSize = MAX5715_SPI_DataSize;
|
||||
parameters->SPI_Direction = MAX5715_SPI_Direction;
|
||||
parameters->SPI_FirstBit = MAX5715_SPI_FirstBit;
|
||||
parameters->SPI_Mode = MAX5715_SPI_Mode;
|
||||
parameters->SPI_NSS = MAX5715_SPI_NSS;
|
||||
parameters->SPI_NSS_internal = MAX5715_SPI_NSS_INTERNAL;
|
||||
parameters->rxQueueSize = MAX5715_SPI_RX_QUEUE;
|
||||
parameters->txQueueSize = MAX5715_SPI_TX_QUEUE;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus MAX5715_sendCommand(const struct MAX5715* self, uint8_t command, uint16_t data)
|
||||
{
|
||||
char buffer[3] = {(char)command, (char)(data >> 4), (char)((data << 4) & 0x00F0)};
|
||||
|
||||
return IODevice_write(self->device, buffer, 3);
|
||||
}
|
||||
|
||||
@@ -70,17 +70,26 @@ static int nhd0420_cursorRowOffset[NHD0420_NUMBER_OF_ROWS] =
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
|
||||
ErrorStatus NHD0420_construct(const struct IODevice* const device)
|
||||
ErrorStatus NHD0420_construct(struct NHD0420* self, const struct IODevice* device)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
if (self->device == NULL)
|
||||
{
|
||||
self->device = device;
|
||||
}
|
||||
else
|
||||
{
|
||||
returnValue = ERROR;
|
||||
}
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
||||
void NHD0420_destruct (const struct IODevice* self)
|
||||
void NHD0420_destruct (struct NHD0420* self)
|
||||
{
|
||||
|
||||
self->device = NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -118,6 +127,7 @@ ErrorStatus NHD0420_getSpiParameters(struct SpiParameters* parameters)
|
||||
parameters->SPI_FirstBit = NHD0420_SPI_FirstBit;
|
||||
parameters->SPI_Mode = NHD0420_SPI_Mode;
|
||||
parameters->SPI_NSS = NHD0420_SPI_NSS;
|
||||
parameters->SPI_NSS_internal = NHD0420_SPI_NSS_INTERNAL;
|
||||
parameters->rxQueueSize = NHD0420_SPI_RX_QUEUE;
|
||||
parameters->txQueueSize = NHD0420_SPI_TX_QUEUE;
|
||||
}
|
||||
@@ -127,7 +137,7 @@ ErrorStatus NHD0420_getSpiParameters(struct SpiParameters* parameters)
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_setCursorToPosition(const struct IODevice* self, char row, char column)
|
||||
ErrorStatus NHD0420_setCursorToPosition(const struct NHD0420* self, char row, char column)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
@@ -157,7 +167,7 @@ ErrorStatus NHD0420_setCursorToPosition(const struct IODevice* self, char row, c
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_setContrast(const struct IODevice* self, char contrast)
|
||||
ErrorStatus NHD0420_setContrast(const struct NHD0420* self, char contrast)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
@@ -183,7 +193,7 @@ ErrorStatus NHD0420_setContrast(const struct IODevice* self, char contrast)
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_setBacklightBrightness(const struct IODevice* self, char brightness)
|
||||
ErrorStatus NHD0420_setBacklightBrightness(const struct NHD0420* self, char brightness)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
@@ -209,7 +219,7 @@ ErrorStatus NHD0420_setBacklightBrightness(const struct IODevice* self, char bri
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_setRS232Baudrate(const struct IODevice* self, char baudrate)
|
||||
ErrorStatus NHD0420_setRS232Baudrate(const struct NHD0420* self, char baudrate)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
@@ -233,7 +243,7 @@ ErrorStatus NHD0420_setRS232Baudrate(const struct IODevice* self, char baudrate)
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_setI2CAddress(const struct IODevice* self, char address)
|
||||
ErrorStatus NHD0420_setI2CAddress(const struct NHD0420* self, char address)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
@@ -268,23 +278,23 @@ ErrorStatus NHD0420_setI2CAddress(const struct IODevice* self, char address)
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
ErrorStatus NHD0420_sendCommand(const struct IODevice* self, char command)
|
||||
ErrorStatus NHD0420_sendCommand(const struct NHD0420* self, char command)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
char buffer[NHD0420_CMD_LENGTH] = {NHD0420_CMD_PREFIX, command};
|
||||
|
||||
returnValue = IODevice_write(self, buffer, NHD0420_CMD_LENGTH);
|
||||
returnValue = IODevice_write(self->device, buffer, NHD0420_CMD_LENGTH);
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
|
||||
ErrorStatus NHD0420_sendData(const struct IODevice* self, const char* buffer, size_t length)
|
||||
ErrorStatus NHD0420_sendData(const struct NHD0420* self, const char* buffer, size_t length)
|
||||
{
|
||||
ErrorStatus returnValue = SUCCESS;
|
||||
|
||||
returnValue = IODevice_write(self, buffer, length);
|
||||
returnValue = IODevice_write(self->device, buffer, length);
|
||||
|
||||
return returnValue;
|
||||
}
|
||||
|
||||
@@ -66,6 +66,7 @@ extern struct Led* const ledGreen;
|
||||
extern struct Led* const ledOrange;
|
||||
// Export of UARTs
|
||||
extern struct Uart* const uart1;
|
||||
extern struct Uart* const uart3;
|
||||
// Export of SPIs
|
||||
extern struct Spi* const spi1;
|
||||
extern struct Spi* const spi3;
|
||||
|
||||
@@ -91,6 +91,7 @@ struct SpiParameters
|
||||
uint16_t SPI_CPOL;
|
||||
uint16_t SPI_CPHA;
|
||||
uint16_t SPI_NSS;
|
||||
uint16_t SPI_NSS_internal;
|
||||
uint16_t SPI_BaudRatePrescaler;
|
||||
uint16_t SPI_FirstBit;
|
||||
uint16_t SPI_CRCPolynomial;
|
||||
|
||||
@@ -37,6 +37,7 @@
|
||||
#include "uart.h"
|
||||
#include "keypadMatrix.h"
|
||||
#include "nhd0420.h"
|
||||
#include "MAX5715.h"
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -48,19 +49,13 @@
|
||||
#define UART_LOG_BAUDRATE (57600)
|
||||
#define UART_LOG_TX_QUEUE (256)
|
||||
|
||||
// UART3 Settings (Developer terminal)
|
||||
#define UART_TER_TYPEDEF (USART3)
|
||||
#define UART_TER_BAUDRATE (115200)
|
||||
#define UART_TER_TX_QUEUE (512)
|
||||
|
||||
// SPI1 settings
|
||||
#define SPI_DAC_TYPEDEF (SPI1)
|
||||
#define SPI_DAC_Direction (SPI_Direction_2Lines_FullDuplex)
|
||||
#define SPI_DAC_Mode (SPI_Mode_Master)
|
||||
#define SPI_DAC_DataSize (SPI_DataSize_8b)
|
||||
#define SPI_DAC_CPOL (SPI_CPOL_High)
|
||||
#define SPI_DAC_CPHA (SPI_CPHA_2Edge)
|
||||
#define SPI_DAC_NSS (SPI_NSS_Hard)
|
||||
#define SPI_DAC_BaudRatePrescaler (SPI_BaudRatePrescaler_128)
|
||||
#define SPI_DAC_FirstBit (SPI_FirstBit_MSB)
|
||||
#define SPI_DAC_CRCPolynomial (7)
|
||||
#define SPI_DAC_RX_QUEUE (32)
|
||||
#define SPI_DAC_TX_QUEUE (32)
|
||||
|
||||
// SPI3 settings (LCD / EEPROM)
|
||||
#define SPI_LCD_EEPROM_TYPEDEF (SPI3)
|
||||
@@ -89,10 +84,13 @@ static struct Led _ledOrange;
|
||||
// USART
|
||||
static struct Uart _uart1;
|
||||
static struct UartParameters _uart1Parameters;
|
||||
static struct Uart _uart3;
|
||||
static struct UartParameters _uart3Parameters;
|
||||
|
||||
// SPI
|
||||
static struct Spi _spi1;
|
||||
static struct SpiDevice _spiDAC;
|
||||
static struct SpiParameters _spi1DACParameters;
|
||||
static struct Spi _spi3;
|
||||
static struct SpiParameters _spi3DisplayParameters;
|
||||
static struct SpiParameters _spi3EEPROMParameters;
|
||||
@@ -110,10 +108,13 @@ struct Led* const ledOrange = &_ledOrange;
|
||||
|
||||
struct Uart* const uart1 = &_uart1;
|
||||
struct UartParameters* uartLoggerParam = &_uart1Parameters;
|
||||
struct Uart* const uart3 = &_uart3;
|
||||
struct UartParameters* uartTerminalParam = &_uart3Parameters;
|
||||
|
||||
struct Spi* const spi1 = &_spi1;
|
||||
struct Spi* const spi3 = &_spi3;
|
||||
struct SpiDevice* const spiDAC = &_spiDAC;
|
||||
struct SpiParameters* const spiDACParam = &_spi1DACParameters;
|
||||
struct SpiDevice* const spiDisplay = &_spiDisplay;
|
||||
struct SpiParameters* const spiDisplayParam = &_spi3DisplayParameters;
|
||||
struct SpiDevice* const spiEEPROM = &_spiEEPROM;
|
||||
@@ -155,11 +156,22 @@ ErrorStatus initPlatform(void)
|
||||
uartLoggerParam->txQueueSize = UART_LOG_TX_QUEUE;
|
||||
returnValue = Uart_construct(uart1, uartLoggerParam);
|
||||
|
||||
// IRQ_setInterruptProperties(SPI1_IRQn, 11, 11, ENABLE);
|
||||
// spi1->initialized = false;
|
||||
// spi1->SPI_TypeDef = SPI_DAC_TYPEDEF;
|
||||
// SPI_getDefaultParameters(&_spi1Parameters);
|
||||
// SPI_construct(spi1, &_spi1Parameters);
|
||||
// // Initialize the Terminal UART
|
||||
IRQ_setInterruptProperties(USART3_IRQn, 15, 15, ENABLE);
|
||||
uart3->USART_TypeDef = UART_TER_TYPEDEF;
|
||||
Uart_getDefaultParameters(uartTerminalParam);
|
||||
// Adjust to higher baudrate for intensive logging
|
||||
uartLoggerParam->baudrate = UART_TER_BAUDRATE;
|
||||
// Adjust the TX queue size for intensive logging
|
||||
uartLoggerParam->txQueueSize = UART_TER_TX_QUEUE;
|
||||
returnValue = Uart_construct(uart3, uartTerminalParam);
|
||||
|
||||
IRQ_setInterruptProperties(SPI1_IRQn, 12, 12, ENABLE);
|
||||
spi1->initialized = false;
|
||||
spi1->SPI_TypeDef = SPI_DAC_TYPEDEF;
|
||||
MAX5715_getSpiParameters(spiDACParam);
|
||||
GPIO_SetBits(spiDAC->SPI_CE.GPIO_Typedef, spiDAC->SPI_CE.GPIO_InitStruct.GPIO_Pin);
|
||||
SpiDevice_construct(spiDAC, spi1, spiDACParam, spiDAC->SPI_CE);
|
||||
|
||||
IRQ_setInterruptProperties(SPI3_IRQn, 12, 12, ENABLE);
|
||||
spi3->initialized = false;
|
||||
@@ -174,6 +186,7 @@ ErrorStatus initPlatform(void)
|
||||
spiDisplayParam->txQueueSize = SPI_LCD_EEPROM_TX_QUEUE;
|
||||
///TODO SPI_CE should be initialized individually
|
||||
GPIO_SetBits(spiDisplay->SPI_CE.GPIO_Typedef, spiDisplay->SPI_CE.GPIO_InitStruct.GPIO_Pin);
|
||||
GPIO_SetBits(spiEEPROM->SPI_CE.GPIO_Typedef, spiEEPROM->SPI_CE.GPIO_InitStruct.GPIO_Pin);
|
||||
SpiDevice_construct(spiDisplay, spi3, spiDisplayParam, spiDisplay->SPI_CE);
|
||||
SpiDevice_construct(spiEEPROM, spi3, spiEEPROMParam, spiEEPROM->SPI_CE);
|
||||
|
||||
@@ -223,6 +236,9 @@ static ErrorStatus initIO (void)
|
||||
RCC_APB1PeriphResetCmd(RCC_APB1Periph_SPI3, DISABLE);
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
|
||||
|
||||
RCC_APB1PeriphResetCmd(RCC_APB1Periph_USART3, DISABLE);
|
||||
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);
|
||||
|
||||
RCC_APB2PeriphResetCmd(RCC_APB2Periph_USART1, DISABLE);
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
|
||||
|
||||
@@ -233,9 +249,9 @@ static ErrorStatus initIO (void)
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
|
||||
|
||||
|
||||
//! Enable USART clock
|
||||
|
||||
/* Peripheral bus power --------------------------------------------------*/
|
||||
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOA, DISABLE);
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
|
||||
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOB, DISABLE);
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
|
||||
RCC_APB2PeriphResetCmd(RCC_APB2Periph_GPIOC, DISABLE);
|
||||
@@ -277,6 +293,22 @@ static ErrorStatus initIO (void)
|
||||
// Apply pin-remapping for UART1 I/Os (alternative I/Os usage)
|
||||
GPIO_PinRemapConfig(GPIO_Remap_USART1, ENABLE);
|
||||
|
||||
/* USART3 initialisation -------------------------------------------------*/
|
||||
// Init TX line
|
||||
uart3->USART_TX.GPIO_Typedef = GPIOB;
|
||||
uart3->USART_TX.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
uart3->USART_TX.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
|
||||
uart3->USART_TX.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(uart3->USART_TX.GPIO_Typedef, &uart3->USART_TX.GPIO_InitStruct);
|
||||
|
||||
// Init RX line
|
||||
uart3->USART_RX.GPIO_Typedef = GPIOB;
|
||||
uart3->USART_RX.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
uart3->USART_RX.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_11;
|
||||
uart3->USART_RX.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(uart3->USART_RX.GPIO_Typedef, &uart3->USART_RX.GPIO_InitStruct);
|
||||
|
||||
|
||||
/* SPI initialisation ----------------------------------------------------*/
|
||||
// SPI1 CLK
|
||||
_spi1.SPI_CLK.GPIO_Typedef = GPIOA;
|
||||
@@ -298,11 +330,12 @@ static ErrorStatus initIO (void)
|
||||
GPIO_Init(_spi1.SPI_MOSI.GPIO_Typedef, &_spi1.SPI_MOSI.GPIO_InitStruct);
|
||||
// SPI1 CE
|
||||
_spiDAC.SPI_CE.GPIO_Typedef = GPIOA;
|
||||
_spiDAC.SPI_CE.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
|
||||
_spiDAC.SPI_CE.GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
_spiDAC.SPI_CE.GPIO_InitStruct.GPIO_Pin = GPIO_Pin_4;
|
||||
_spiDAC.SPI_CE.GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(_spiDAC.SPI_CE.GPIO_Typedef, &_spiDAC.SPI_CE.GPIO_InitStruct);
|
||||
|
||||
|
||||
spiDAC->spi = &_spi1;
|
||||
|
||||
|
||||
|
||||
@@ -27,6 +27,7 @@
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include "Logger.h"
|
||||
#include "spi.h"
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -81,6 +82,12 @@ ErrorStatus SPI_construct(struct Spi* self, const struct SpiParameters* paramete
|
||||
self->SPI_InitStruct.SPI_CRCPolynomial = parameters->SPI_CRCPolynomial;
|
||||
SPI_Init(self->SPI_TypeDef, &self->SPI_InitStruct);
|
||||
|
||||
if (parameters->SPI_NSS == SPI_NSS_Hard)
|
||||
{
|
||||
SPI_NSSInternalSoftwareConfig(self->SPI_TypeDef, parameters->SPI_NSS_internal);
|
||||
SPI_SSOutputCmd(self->SPI_TypeDef, ENABLE);
|
||||
}
|
||||
|
||||
//! Enable USART interface
|
||||
SPI_Cmd(self->SPI_TypeDef, ENABLE);
|
||||
|
||||
|
||||
@@ -84,7 +84,10 @@ ErrorStatus SpiDevice_write (const struct SpiDevice* self, const char* buffer, i
|
||||
|
||||
|
||||
xSemaphoreTake(self->spi->spiClaimed, portMAX_DELAY);
|
||||
if (self->spi->SPI_InitStruct.SPI_NSS == SPI_NSS_Soft)
|
||||
{
|
||||
self->spi->SPI_CE = &self->SPI_CE;
|
||||
}
|
||||
|
||||
|
||||
//! Copy the incoming data into SPI data structure
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-965619469903595948" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-24990244560702828" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
@@ -16,7 +16,7 @@
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-965619469903595948" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-24990244560702828" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-965619469903595948" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-24990244560702828" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
@@ -18,7 +18,7 @@
|
||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider-reference id="org.eclipse.cdt.managedbuilder.core.MBSLanguageSettingsProvider" ref="shared-provider"/>
|
||||
<provider copy-of="extension" id="org.eclipse.cdt.managedbuilder.core.GCCBuildCommandParser"/>
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-965619469903595948" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<provider class="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" console="false" env-hash="-24990244560702828" id="fr.ac6.mcu.ide.build.CrossBuiltinSpecsDetector" keep-relative-paths="false" name="Ac6 SW4 STM32 MCU Built-in Compiler Settings" parameter="${COMMAND} ${FLAGS} -E -P -v -dD "${INPUTS}"" prefer-non-shared="true">
|
||||
<language-scope id="org.eclipse.cdt.core.gcc"/>
|
||||
<language-scope id="org.eclipse.cdt.core.g++"/>
|
||||
</provider>
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "misc.h"
|
||||
#include "stm32f10x_rcc.h"
|
||||
|
||||
#include "MAX5715.h"
|
||||
#include "nhd0420.h"
|
||||
#include "keypadMatrix.h"
|
||||
|
||||
@@ -77,6 +78,9 @@ static xTaskHandle initTaskHandle;
|
||||
static xTaskHandle ledTaskHandle;
|
||||
static xTaskHandle sysTaskHandle;
|
||||
|
||||
static struct NHD0420 nhd0420;
|
||||
static struct MAX5715 max5715;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Function declarations
|
||||
// -----------------------------------------------------------------------------
|
||||
@@ -153,21 +157,26 @@ static void initTask(void* parameters)
|
||||
|
||||
Logger_construct(&uart1->device);
|
||||
|
||||
NHD0420_construct(&spiDisplay->device);
|
||||
NHD0420_construct(&nhd0420, &spiDisplay->device);
|
||||
|
||||
NHD0420_turnOffDisplay(&spiDisplay->device);
|
||||
NHD0420_turnOffDisplay(&nhd0420);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_clearScreen(&spiDisplay->device);
|
||||
NHD0420_clearScreen(&nhd0420);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_turnOnDisplay(&spiDisplay->device);
|
||||
NHD0420_turnOnDisplay(&nhd0420);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_setContrast(&spiDisplay->device, 30);
|
||||
NHD0420_setContrast(&nhd0420, 30);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_setBacklightBrightness(&spiDisplay->device, 3);
|
||||
NHD0420_setBacklightBrightness(&nhd0420, 3);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_setCursorToHome(&spiDisplay->device);
|
||||
NHD0420_setCursorToHome(&nhd0420);
|
||||
vTaskDelay(1000);
|
||||
NHD0420_sendData(&spiDisplay->device, "Anode repair A", 20);
|
||||
NHD0420_sendData(&nhd0420, "Anode repair A", 20);
|
||||
|
||||
MAX5715_construct(&max5715, &spiDAC->device);
|
||||
|
||||
MAX5715_writeCODEn(&max5715, (MAX5715_SEL_DACA | MAX5715_SEL_DACC), 0x579B);
|
||||
|
||||
|
||||
|
||||
xTaskCreate(ledBlinkTask, (const char* const)"ledTask", 40, &ledTaskArguments, 0, &ledTaskHandle);
|
||||
|
||||
@@ -172,6 +172,58 @@ void USART1_IRQHandler(void)
|
||||
}
|
||||
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* @brief Function: USART3_IRQHandler
|
||||
*
|
||||
* Dedicated Interrupt Service Routine for USART3
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @todo
|
||||
* -----------------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void USART3_IRQHandler(void)
|
||||
{
|
||||
static signed portBASE_TYPE higherPriorityTaskWoken = pdFALSE;
|
||||
|
||||
|
||||
//! Transmission register empty interrupt
|
||||
if(USART_GetITStatus(USART3, USART_IT_TXE) != RESET)
|
||||
{
|
||||
|
||||
//! Receive element from usart transmission queue
|
||||
|
||||
struct usartQueueItem usartTxItem;
|
||||
|
||||
xQueueReceiveFromISR(uart3->txQueue, &usartTxItem, &higherPriorityTaskWoken);
|
||||
//! Write one byte to the transmit data register
|
||||
USART_SendData(USART3, usartTxItem.byte);
|
||||
//! check if queue is empty -> all bytes transmit
|
||||
if(pdTRUE == xQueueIsQueueEmptyFromISR(uart3->txQueue))
|
||||
{
|
||||
//! Disable the COMPORT Transmit interrupt and release semaphore
|
||||
USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
|
||||
xSemaphoreGiveFromISR(uart3->txSemaphore, &higherPriorityTaskWoken);
|
||||
}
|
||||
}
|
||||
|
||||
//! Current interrupt is triggered by USART_RXNE (receive register not empty)
|
||||
if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
|
||||
{
|
||||
//! Read one byte from the receive data register
|
||||
|
||||
struct usartQueueItem usartRxItem;
|
||||
//! Reading from reception register automatically clears the RXNE interrupt
|
||||
usartRxItem.byte = (unsigned char) 0xFF & USART_ReceiveData(USART3);
|
||||
//! Add the byte to the bluetooth RX queue
|
||||
//! In case of a full queue, the data is dumped
|
||||
(void)xQueueSendFromISR(uart3->rxQueue, &usartRxItem, &higherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
portEND_SWITCHING_ISR(higherPriorityTaskWoken);
|
||||
}
|
||||
|
||||
/** ----------------------------------------------------------------------------
|
||||
* @brief Function: SPI1_IRQHandler
|
||||
*
|
||||
@@ -195,15 +247,7 @@ void SPI1_IRQHandler (void)
|
||||
|
||||
xQueueReceiveFromISR(spi1->txQueue, &spiTxItem, &higherPriorityTaskWoken);
|
||||
//! Write one byte to the transmit data register
|
||||
if (spi1->SPI_InitStruct.SPI_NSS == SPI_NSS_Soft)
|
||||
{
|
||||
GPIO_ResetBits(spi1->SPI_CE->GPIO_Typedef, spi1->SPI_CE->GPIO_InitStruct.GPIO_Pin);
|
||||
}
|
||||
SPI_I2S_SendData(SPI1, spiTxItem.byte);
|
||||
if (spi1->SPI_InitStruct.SPI_NSS == SPI_NSS_Soft)
|
||||
{
|
||||
GPIO_SetBits(spi1->SPI_CE->GPIO_Typedef, spi1->SPI_CE->GPIO_InitStruct.GPIO_Pin);
|
||||
}
|
||||
//! check if queue is empty -> all bytes transmit
|
||||
if(pdTRUE == xQueueIsQueueEmptyFromISR(spi1->txQueue))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user