Browse Source

Привёл работу с SPI в соответствие с даташитом.

Vladimir N. Shilov 9 years ago
parent
commit
0f08300f6e
3 changed files with 60 additions and 28 deletions
  1. 2 0
      ReadMe.txt
  2. 40 20
      VAPC-meter.layout
  3. 18 8
      lib/max7219.c

+ 2 - 0
ReadMe.txt

@@ -76,3 +76,5 @@ SVN-инит 2014.12.29
 Исправил дефайны индикаторов.
 
 Осцилом ничего не увидел на выводах SPI, нужно искать.
+
+Почитал даташит на тему SPI, поправил свой код.

+ 40 - 20
VAPC-meter.layout

@@ -2,34 +2,29 @@
 <CodeBlocks_layout_file>
 	<FileVersion major="1" minor="0" />
 	<ActiveTarget name="Release" />
-	<File name="Makefile" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
-		<Cursor>
-			<Cursor1 position="4622" topLine="0" />
-		</Cursor>
-	</File>
-	<File name="inc\stm8l15x_conf.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="StdPerphDrv\inc\stm8l15x_clk.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="759" topLine="27" />
+			<Cursor1 position="11542" topLine="255" />
 		</Cursor>
 	</File>
 	<File name="lib\max7219.c" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="813" topLine="0" />
+			<Cursor1 position="2792" topLine="21" />
 		</Cursor>
 	</File>
-	<File name="StdPerphDrv\src\stm8l15x_clk.c" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="Makefile" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="17121" topLine="397" />
+			<Cursor1 position="4622" topLine="0" />
 		</Cursor>
 	</File>
-	<File name="lib\max7219.h" open="1" top="1" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="lib\max7219.h" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1837" topLine="45" />
+			<Cursor1 position="1837" topLine="0" />
 		</Cursor>
 	</File>
 	<File name="lib\rtos.c" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="6475" topLine="148" />
+			<Cursor1 position="6475" topLine="95" />
 		</Cursor>
 	</File>
 	<File name="lib\rtos.h" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -37,24 +32,24 @@
 			<Cursor1 position="2457" topLine="25" />
 		</Cursor>
 	</File>
-	<File name="src\main.c" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="src\main.c" open="1" top="1" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1530" topLine="16" />
+			<Cursor1 position="2100" topLine="0" />
 		</Cursor>
 	</File>
 	<File name="src\stm8l15x_it.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="1360" topLine="0" />
+			<Cursor1 position="476" topLine="301" />
 		</Cursor>
 	</File>
-	<File name="StdPerphDrv\inc\stm8l15x.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="StdPerphDrv\inc\stm8l15x_spi.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="129580" topLine="2906" />
+			<Cursor1 position="10728" topLine="187" />
 		</Cursor>
 	</File>
-	<File name="StdPerphDrv\inc\stm8l15x_clk.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+	<File name="StdPerphDrv\src\stm8l15x_spi.c" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
 		<Cursor>
-			<Cursor1 position="11542" topLine="255" />
+			<Cursor1 position="13599" topLine="294" />
 		</Cursor>
 	</File>
 	<File name="StdPerphDrv\inc\stm8l15x_tim4.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@@ -67,4 +62,29 @@
 			<Cursor1 position="19494" topLine="537" />
 		</Cursor>
 	</File>
+	<File name="inc\stm8l15x_conf.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="759" topLine="27" />
+		</Cursor>
+	</File>
+	<File name="inc\stm8l15x_it.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="0" topLine="41" />
+		</Cursor>
+	</File>
+	<File name="StdPerphDrv\inc\stm8l15x.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="129580" topLine="2906" />
+		</Cursor>
+	</File>
+	<File name="StdPerphDrv\inc\stm8l15x_gpio.h" open="0" top="0" tabpos="0" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="6115" topLine="142" />
+		</Cursor>
+	</File>
+	<File name="StdPerphDrv\src\stm8l15x_clk.c" open="0" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
+		<Cursor>
+			<Cursor1 position="17121" topLine="397" />
+		</Cursor>
+	</File>
 </CodeBlocks_layout_file>

+ 18 - 8
lib/max7219.c

@@ -16,7 +16,7 @@
 #define SPI_NSS         GPIO_Pin_4
 #define SPI_SCK         GPIO_Pin_5
 #define SPI_MOSI        GPIO_Pin_6
-#define SPI_PINS        (SPI_NSS|SPI_SCK|SPI_MOSI)
+#define SPI_PINS        (SPI_SCK|SPI_MOSI)
 
 void MAX7219_Init(void) {
     SPI_DeInit(SPI1);
@@ -24,10 +24,12 @@ void MAX7219_Init(void) {
     CLK_PeripheralClockConfig(CLK_Peripheral_SPI1, ENABLE);
     /* Set the MOSI,MISO and SCK at high level */
     GPIO_ExternalPullUpConfig(SPI_PORT, SPI_PINS, ENABLE);
-//    GPIO_Init(SPI_PORT, SPI_PINS, GPIO_Mode_Out_PP_High_Fast);
+    /* Configure Lock pin */
+    GPIO_Init(SPI_PORT, SPI_NSS, GPIO_Mode_Out_PP_High_Fast);
+    GPIO_SetBits(SPI_PORT, SPI_NSS);
     /* Init SPI */
     SPI_Init(SPI1, SPI_FirstBit_MSB, SPI_BaudRatePrescaler_2, SPI_Mode_Master,
-             SPI_CPOL_High, SPI_CPHA_2Edge, SPI_Direction_1Line_Tx, SPI_NSS_Hard, 0x00);
+             SPI_CPOL_High, SPI_CPHA_2Edge, SPI_Direction_1Line_Tx, SPI_NSS_Soft, 0x00);
     /* SPI Enable */
     SPI_Cmd(SPI1, ENABLE);
 
@@ -35,23 +37,31 @@ void MAX7219_Init(void) {
 	MAX7219_WriteData(DecodeMode, 0x00);            // все без BCD декодирования
 	MAX7219_WriteData(ScanLimit, MAX7219_DIGITS);   // сколько цифр используем
 	MAX7219_WriteData(Intensity, MAX7219_BRIGHT);   // яркость из 16
-	MAX7219_WriteData(Power,MAX7219_ON);            // включили питание
+	MAX7219_WriteData(Power, MAX7219_ON);           // включили питание
 
 }
 
 void MAX7219_WriteData(max7219_reg_t reg, uint8_t data)
 {
-//    SPI_NSSInternalSoftwareCmd(ENABLE);
+    /*!< Wait wait until the completion of the transfer. */
+    while (SPI_GetFlagStatus(SPI1, SPI_FLAG_BSY) == SET) {}
+    /* Down LOCK pin */
+    GPIO_ReseBits(SPI_PORT, SPI_NSS);
 
     /*!< Wait until the transmit buffer is empty */
     while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET) {}
     /* Send the register where the data will be stored */
-    SPI_SendData(SPI1, reg);
+    //SPI_SendData(SPI1, reg);
+    SPI1->DR = reg; /* Write in the DR register the data to be sent*/
 
     /*!< Wait until the transmit buffer is empty */
     while (SPI_GetFlagStatus(SPI1, SPI_FLAG_TXE) == RESET) {}
     /* Send the data to be stored */
-    SPI_SendData(SPI1, data);
+    //SPI_SendData(SPI1, data);
+    SPI1->DR = data; /* Write in the DR register the data to be sent*/
 
-//    SPI_NSSInternalSoftwareCmd(DISABLE);
+    /*!< Wait wait until the completion of the transfer. */
+    while (SPI_GetFlagStatus(SPI1, SPI_FLAG_BSY) == SET) {}
+    /* Up LOCK pin */
+    GPIO_SetBits(SPI_PORT, SPI_NSS);
 }