Skip to content
Snippets Groups Projects
Commit af870d7a authored by Gregory Nutt's avatar Gregory Nutt
Browse files

Fix bugs in SLCD test and in SLCD CODEC

parent 5bb3a187
No related branches found
No related tags found
No related merge requests found
......@@ -41,6 +41,7 @@
#include "up_arch.h"
#include "stm32_pwr.h"
#include "stm32_rcc.h"
#include "stm32_waste.h"
......@@ -78,6 +79,16 @@
#ifdef CONFIG_STM32_STM32L15XX
void stm32_rcc_enablelse(void)
{
uint16_t pwrcr;
/* The LSE is in the RTC domain and write access is denied to this domain
* after reset, you have to enable write access using DBP bit in the PWR CR
* register before to configuring the LSE.
*/
pwrcr = getreg16(STM32_PWR_CR);
putreg16(pwrcr | PWR_CR_DBP, STM32_PWR_CR);
/* Enable the External Low-Speed (LSE) oscillator by setting the LSEON bit
* the RCC CSR register.
*/
......@@ -110,6 +121,10 @@ void stm32_rcc_enablelse(void)
modifyreg32(STM32_RCC_CSR, 0, RCC_CSR_RTCEN);
#endif
#endif
/* Restore the previous state of the DBP bit */
putreg16(pwrcr, STM32_PWR_CR);
}
#else
......
......@@ -841,7 +841,7 @@ static void slcd_writech(uint8_t ch, uint8_t curpos, uint8_t options)
{
segset |= 0x0002;
}
else if ((options & SCLD_DP) != 0)
else if ((options & SCLD_COLON) != 0)
{
segset |= 0x0020;
}
......
......@@ -109,7 +109,7 @@ static uint8_t slcd_nibble(uint8_t ascii)
* Name: slcd_reget
*
* Description:
* We have unused characters from the last, unsuccessful decode attempt.
* We have unused characters from the last, unsuccessful decode attempt.
* Return one of these instead of the new character from the stream.
*
* Input Parameters:
......@@ -260,9 +260,14 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
if (!IS_HEX(ch))
{
/* Decode the value following the bracket */
code = CODE_RETURN(ch);
count = 0;
/* Verify the special CLCD action code */
if (ch < (int)FIRST_SLCDCODE || ch > (int)LAST_SLCDCODE)
if (code < (int)FIRST_SLCDCODE || code > (int)LAST_SLCDCODE)
{
/* Not a special command code.. put the character in the reget
* buffer.
......@@ -275,11 +280,6 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
return slcd_reget(state, pch, parg);
}
/* Provide the return values */
code = CODE_RETURN(ch);
count = 0;
}
else
{
......@@ -312,7 +312,7 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
return slcd_reget(state, pch, parg);
}
/* Save the second character of the two byte hexidecimal number */
state->buf[NDX_COUNTL] = (uint8_t)ch;
......@@ -337,28 +337,21 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
state->buf[NDX_CODE5] = (uint8_t)ch;
state->nch = NCH_CODE5;
/* Verify the special CLCD action code */
if (ch < (int)FIRST_SLCDCODE || ch > (int)LAST_SLCDCODE)
{
/* Not a special command code. Return the ESC now and the rest
* of the characters later.
*/
return slcd_reget(state, pch, parg);
}
/* Provide the return values */
/* Get the code and the count values. All count values must be greater
* than 0 or something is wrong.
*/
code = CODE_RETURN(ch);
count = slcd_nibble(state->buf[NDX_COUNTH]) << 4;
slcd_nibble(state->buf[NDX_COUNTL]);
/* All count values must be greater than 0 or something is wrong */
/* Verify the special CLCD action code */
if (count < 1)
if (code < (int)FIRST_SLCDCODE || code > (int)LAST_SLCDCODE || count < 1)
{
/* Return the ESC now and the rest of the characters later. */
/* Not a special command code. Return the ESC now and the rest
* of the characters later.
*/
return slcd_reget(state, pch, parg);
}
......@@ -374,4 +367,3 @@ enum slcdret_e slcd_decode(FAR struct lib_instream_s *stream,
state->nch = 0;
return SLCDRET_SPEC;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment