commit
a5c28afd61
@ -7,6 +7,9 @@
|
||||
#include "Master.h"
|
||||
#include "Rotary.h"
|
||||
#include "retarget_uart.h"
|
||||
#include "LiquidCrystal.h"
|
||||
|
||||
void lcd_starting();
|
||||
|
||||
int main(void)
|
||||
{
|
||||
@ -17,6 +20,8 @@ int main(void)
|
||||
|
||||
printf("Hello there!\r\n");
|
||||
|
||||
lcd_starting();
|
||||
|
||||
ThreadCommon::ThreadManager* manager = new ThreadCommon::ThreadManager;
|
||||
ThreadCommon::QueueManager* qmanager = new ThreadCommon::QueueManager;
|
||||
//Creating queues
|
||||
@ -36,3 +41,44 @@ int main(void)
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief While we don't have UI, this should do for LCD.
|
||||
*
|
||||
*/
|
||||
void lcd_starting() {
|
||||
// LCD pins init.
|
||||
//Well, this lpc is a bit different with those. Table 83 from UM10732-11u68.pdf
|
||||
DigitalIoPin *rs = new DigitalIoPin(1, 9, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 1, 9, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
DigitalIoPin *en = new DigitalIoPin(0, 14, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 14, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
DigitalIoPin *d4 = new DigitalIoPin(0, 13, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 13, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
DigitalIoPin *d5 = new DigitalIoPin(0, 12, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 12, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
DigitalIoPin *d6 = new DigitalIoPin(0, 23, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 23, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
DigitalIoPin *d7 = new DigitalIoPin(0, 11, false);
|
||||
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 11, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||
|
||||
rs->write(false);
|
||||
en->write(false);
|
||||
d4->write(false);
|
||||
d5->write(false);
|
||||
d6->write(false);
|
||||
d7->write(false);
|
||||
// LCD init.
|
||||
LiquidCrystal *lcd = new LiquidCrystal(rs, en, d4, d5, d6, d7);
|
||||
// LCD configure display geometry.
|
||||
lcd->begin(16, 2);
|
||||
lcd->setCursor (0, 0);
|
||||
lcd->print("Hello there");
|
||||
lcd->setCursor (0, 1);
|
||||
lcd->print("Starting...");
|
||||
}
|
||||
|
||||
@ -1,39 +1,71 @@
|
||||
#include "LiquidCrystal.h"
|
||||
|
||||
// Remove this when code will be reworked.
|
||||
#ifndef LiquidCrystal_NOT_FIXED
|
||||
// Remove this when code will be reworked.
|
||||
|
||||
|
||||
#include <cstring>
|
||||
#include "chip.h"
|
||||
#include "board.h"
|
||||
|
||||
#define LOW 0
|
||||
#define HIGH 1
|
||||
#define MHz1 1000000
|
||||
|
||||
static bool match_flag = false;
|
||||
|
||||
extern "C" {
|
||||
/**
|
||||
* @brief Handle interrupt from 32-bit timer 0
|
||||
* Sets match_flag to true when the match occurs.
|
||||
* @return Nothing
|
||||
*/
|
||||
void TIMER32_0_IRQHandler(void)
|
||||
{
|
||||
if(Chip_TIMER_MatchPending(LPC_TIMER32_0, 0)) {
|
||||
Chip_TIMER_ClearMatch(LPC_TIMER32_0, 0);
|
||||
match_flag = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void delayMicroseconds(unsigned int us)
|
||||
{
|
||||
// implement with RIT
|
||||
}
|
||||
#else
|
||||
void delayMicroseconds(uint32_t delay)
|
||||
{
|
||||
static int init;
|
||||
if(!init) {
|
||||
// start core clock counter
|
||||
CoreDebug->DEMCR |= 1 << 24;
|
||||
DWT->CTRL |= 1;
|
||||
init = 1;
|
||||
}
|
||||
/* Reset match flag */
|
||||
match_flag = false;
|
||||
|
||||
uint32_t start = DWT->CYCCNT;
|
||||
delay = delay * 72; // assuming 72MHz clock
|
||||
while(DWT->CYCCNT - start < delay);
|
||||
}
|
||||
/* Initialize 32-bit timer 0 clock */
|
||||
Chip_TIMER_Init(LPC_TIMER32_0);
|
||||
|
||||
#endif
|
||||
/* Timer setup for match and interrupt at TICKRATE_HZ */
|
||||
Chip_TIMER_Reset(LPC_TIMER32_0);
|
||||
|
||||
/* Enable timer to generate interrupt when time matches */
|
||||
Chip_TIMER_MatchEnableInt(LPC_TIMER32_0, 0);
|
||||
|
||||
/* Setup 32-bit timer's duration (32-bit match time) */
|
||||
/* Once_per_microsecond * number_of_microseconds. */
|
||||
Chip_TIMER_SetMatch(LPC_TIMER32_0, 0, (Chip_Clock_GetSystemClockRate() / MHz1 * us));
|
||||
|
||||
/* Setup timer to stop when match occurs */
|
||||
Chip_TIMER_StopOnMatchEnable(LPC_TIMER32_0, 0);
|
||||
|
||||
/* Start timer */
|
||||
Chip_TIMER_Enable(LPC_TIMER32_0);
|
||||
|
||||
/* Clear timer of any pending interrupts */
|
||||
NVIC_ClearPendingIRQ(TIMER_32_0_IRQn);
|
||||
|
||||
/* Enable timer interrupt */
|
||||
NVIC_EnableIRQ(TIMER_32_0_IRQn);
|
||||
|
||||
/* Wait for the interrupt to trigger */
|
||||
while(!match_flag);
|
||||
|
||||
/*Disable the interrupt*/
|
||||
Chip_TIMER_MatchDisableInt(LPC_TIMER32_0, 0);
|
||||
|
||||
/* Disable timer */
|
||||
Chip_TIMER_Disable(LPC_TIMER32_0);
|
||||
|
||||
/* Deinitialise timer. */
|
||||
Chip_TIMER_DeInit(LPC_TIMER32_0);
|
||||
}
|
||||
|
||||
// When the display powers up, it is configured as follows:
|
||||
//
|
||||
@ -57,7 +89,7 @@ void delayMicroseconds(uint32_t delay)
|
||||
|
||||
|
||||
LiquidCrystal::LiquidCrystal(DigitalIoPin *rs, DigitalIoPin *enable,
|
||||
DigitalIoPin *d0, DigitalIoPin *d1, DigitalIoPin *d2, DigitalIoPin *d3)
|
||||
DigitalIoPin *d0, DigitalIoPin *d1, DigitalIoPin *d2, DigitalIoPin *d3)
|
||||
{
|
||||
rs_pin = rs;
|
||||
enable_pin = enable;
|
||||
@ -291,7 +323,3 @@ void LiquidCrystal::write4bits(uint8_t value) {
|
||||
|
||||
pulseEnable();
|
||||
}
|
||||
|
||||
// Remove this when code will be reworked.
|
||||
#endif /* LiquidCrystal_NOT_FIXED */
|
||||
// Remove this when code will be reworked.
|
||||
|
||||
@ -1,11 +1,6 @@
|
||||
#ifndef LiquidCrystal_h
|
||||
#define LiquidCrystal_h
|
||||
|
||||
// Remove this when code will be reworked.
|
||||
#define LiquidCrystal_NOT_FIXED
|
||||
#ifndef LiquidCrystal_NOT_FIXED
|
||||
// Remove this when code will be reworked.
|
||||
|
||||
#include <cstddef>
|
||||
#include <string>
|
||||
#include "chip.h"
|
||||
@ -98,8 +93,4 @@ private:
|
||||
uint8_t _numlines,_currline;
|
||||
};
|
||||
|
||||
// Remove this when code will be reworked.
|
||||
#endif /* LiquidCrystal_NOT_FIXED */
|
||||
// Remove this when code will be reworked.
|
||||
|
||||
#endif /* LiquidCrystal_h */
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user