From bcc9298e5bd2049bbee8c1d00482d2695b8e0b70 Mon Sep 17 00:00:00 2001
From: Damien George <damien.p.george@gmail.com>
Date: Sat, 29 Mar 2014 01:24:44 +0000
Subject: [PATCH] stmhal: Add TODO's to exti.c; fix delay in lcd.c.

---
 stmhal/exti.c |  3 +++
 stmhal/lcd.c  | 11 ++++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/stmhal/exti.c b/stmhal/exti.c
index c5378d835..e5e9b53bd 100644
--- a/stmhal/exti.c
+++ b/stmhal/exti.c
@@ -66,6 +66,8 @@
 // There is also a C API, so that drivers which require EXTI interrupt lines
 // can also use this code. See exti.h for the available functions and
 // usrsw.h for an example of using this.
+//
+// TODO Add python method to change callback object.
 
 #define EXTI_OFFSET	(EXTI_BASE - PERIPH_BASE)
 
@@ -302,6 +304,7 @@ void Handle_EXTI_Irq(uint32_t line) {
         if (line < EXTI_NUM_VECTORS) {
             exti_vector_t *v = &exti_vector[line];
             if (v->callback_obj != mp_const_none) {
+                // TODO need to wrap this in an nlr_buf; really need a general function for this
                 rt_call_function_1(v->callback_obj, MP_OBJ_NEW_SMALL_INT(line));
             }
         }
diff --git a/stmhal/lcd.c b/stmhal/lcd.c
index d2db7b7ba..c5952fa48 100644
--- a/stmhal/lcd.c
+++ b/stmhal/lcd.c
@@ -1,3 +1,4 @@
+#include <stdio.h>
 #include <string.h>
 #include <stm32f4xx_hal.h>
 
@@ -59,8 +60,12 @@
 #define LCD_INSTR (0)
 #define LCD_DATA (1)
 
+static void lcd_delay(void) {
+    __asm volatile ("nop\nnop");
+}
+
 static void lcd_out(int instr_data, uint8_t i) {
-    HAL_Delay(0);
+    lcd_delay();
     PYB_LCD_PORT->BSRRH = PYB_LCD_CS1_PIN; // CS=0; enable
     if (instr_data == LCD_INSTR) {
         PYB_LCD_PORT->BSRRH = PYB_LCD_A0_PIN; // A0=0; select instr reg
@@ -69,7 +74,7 @@ static void lcd_out(int instr_data, uint8_t i) {
     }
     // send byte bigendian, latches on rising clock
     for (uint32_t n = 0; n < 8; n++) {
-        HAL_Delay(0);
+        lcd_delay();
         PYB_LCD_PORT->BSRRH = PYB_LCD_SCL_PIN; // SCL=0
         if ((i & 0x80) == 0) {
             PYB_LCD_PORT->BSRRH = PYB_LCD_SI_PIN; // SI=0
@@ -77,7 +82,7 @@ static void lcd_out(int instr_data, uint8_t i) {
             PYB_LCD_PORT->BSRRL = PYB_LCD_SI_PIN; // SI=1
         }
         i <<= 1;
-        HAL_Delay(0);
+        lcd_delay();
         PYB_LCD_PORT->BSRRL = PYB_LCD_SCL_PIN; // SCL=1
     }
     PYB_LCD_PORT->BSRRL = PYB_LCD_CS1_PIN; // CS=1; disable
-- 
GitLab