STM32F407VE adaptations, tried to find initialization bug
This commit is contained in:
		@@ -131,7 +131,7 @@ g_pfnVectors:
 | 
				
			|||||||
  .word  _estack
 | 
					  .word  _estack
 | 
				
			||||||
  .word  Reset_Handler
 | 
					  .word  Reset_Handler
 | 
				
			||||||
  .word  NMI_Handler
 | 
					  .word  NMI_Handler
 | 
				
			||||||
  .word  HardFault_Handler
 | 
					  .word  HardFault_PreHandler
 | 
				
			||||||
  .word  MemManage_Handler
 | 
					  .word  MemManage_Handler
 | 
				
			||||||
  .word  BusFault_Handler
 | 
					  .word  BusFault_Handler
 | 
				
			||||||
  .word  UsageFault_Handler
 | 
					  .word  UsageFault_Handler
 | 
				
			||||||
@@ -240,8 +240,8 @@ g_pfnVectors:
 | 
				
			|||||||
   .weak      NMI_Handler
 | 
					   .weak      NMI_Handler
 | 
				
			||||||
   .thumb_set NMI_Handler,Default_Handler
 | 
					   .thumb_set NMI_Handler,Default_Handler
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
   .weak      HardFault_Handler
 | 
					   .weak      HardFault_PreHandler
 | 
				
			||||||
   .thumb_set HardFault_Handler,Default_Handler
 | 
					   .thumb_set HardFault_PreHandler,Default_Handler
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
   .weak      MemManage_Handler
 | 
					   .weak      MemManage_Handler
 | 
				
			||||||
   .thumb_set MemManage_Handler,Default_Handler
 | 
					   .thumb_set MemManage_Handler,Default_Handler
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,8 @@
 | 
				
			|||||||
#include "shimatta_sdio.h"
 | 
					#include "shimatta_sdio.h"
 | 
				
			||||||
#include "shimatta_sdio_config.h"
 | 
					#include "shimatta_sdio_config.h"
 | 
				
			||||||
#include <cmsis/core_cm4.h>
 | 
					#include <cmsis/core_cm4.h>
 | 
				
			||||||
 | 
					#include <stm32f4xx.h>
 | 
				
			||||||
 | 
					extern void SDIO_wait_ms(unsigned int i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define SETAF(PORT,PIN,AF)  PORT->AFR[(PIN < 8 ? 0 : 1)] |= AF << ((PIN < 8 ? PIN : (PIN - 8)) * 4)
 | 
					#define SETAF(PORT,PIN,AF)  PORT->AFR[(PIN < 8 ? 0 : 1)] |= AF << ((PIN < 8 ? PIN : (PIN - 8)) * 4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -74,6 +76,7 @@ DSTATUS SDIO_status(){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
uint32_t debug;
 | 
					uint32_t debug;
 | 
				
			||||||
uint32_t debug_timeout;
 | 
					uint32_t debug_timeout;
 | 
				
			||||||
 | 
					int debug_acmd = 0;
 | 
				
			||||||
DSTATUS SDIO_initialize(){
 | 
					DSTATUS SDIO_initialize(){
 | 
				
			||||||
	int timeout = 0x3000;
 | 
						int timeout = 0x3000;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
@@ -85,6 +88,7 @@ DSTATUS SDIO_initialize(){
 | 
				
			|||||||
	card_type_t detected_card = CARD_NONE;
 | 
						card_type_t detected_card = CARD_NONE;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	SDIO_init_hw();
 | 
						SDIO_init_hw();
 | 
				
			||||||
 | 
						SDIO_wait_ms(2);
 | 
				
			||||||
	SDIO_init_detect_pins();
 | 
						SDIO_init_detect_pins();
 | 
				
			||||||
	if (checkNotInserted()) {
 | 
						if (checkNotInserted()) {
 | 
				
			||||||
		return STA_NOINIT | STA_NODISK;
 | 
							return STA_NOINIT | STA_NODISK;
 | 
				
			||||||
@@ -92,6 +96,7 @@ DSTATUS SDIO_initialize(){
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	debug=0;
 | 
						debug=0;
 | 
				
			||||||
	SDIO_send_go_idle_CMD0();
 | 
						SDIO_send_go_idle_CMD0();
 | 
				
			||||||
 | 
						SDIO_wait_ms(2);
 | 
				
			||||||
	res8 = SDIO_send_iface_condition_CMD8();
 | 
						res8 = SDIO_send_iface_condition_CMD8();
 | 
				
			||||||
	switch (res8) {
 | 
						switch (res8) {
 | 
				
			||||||
	case CMD8_VOLTAGE_ACCEPTED: // SDV2 Card
 | 
						case CMD8_VOLTAGE_ACCEPTED: // SDV2 Card
 | 
				
			||||||
@@ -112,7 +117,9 @@ DSTATUS SDIO_initialize(){
 | 
				
			|||||||
	do {
 | 
						do {
 | 
				
			||||||
		resa41 = SDIO_init_card_ACMD41(hcs_flag);
 | 
							resa41 = SDIO_init_card_ACMD41(hcs_flag);
 | 
				
			||||||
	} while((resa41 == ACMD41_RESP_INIT) && (--timeout > 0));
 | 
						} while((resa41 == ACMD41_RESP_INIT) && (--timeout > 0));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	debug++;
 | 
						debug++;
 | 
				
			||||||
 | 
						debug_acmd = resa41;
 | 
				
			||||||
	debug_timeout= timeout;
 | 
						debug_timeout= timeout;
 | 
				
			||||||
	switch (resa41) {
 | 
						switch (resa41) {
 | 
				
			||||||
	case ACMD41_RESP_SDSC:
 | 
						case ACMD41_RESP_SDSC:
 | 
				
			||||||
@@ -153,7 +160,7 @@ DSTATUS SDIO_initialize(){
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
uint32_t debug_addr, debug_count;
 | 
					uint32_t debug_addr, debug_count;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
uint32_t __attribute__ ((aligned (16))) buffer_sdio[512/4];
 | 
					//uint32_t __attribute__ ((aligned (16))) buffer_sdio[512/4];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count){
 | 
					DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count){
 | 
				
			||||||
	uint32_t addr;
 | 
						uint32_t addr;
 | 
				
			||||||
@@ -166,14 +173,14 @@ DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count){
 | 
				
			|||||||
	for (; count > 0; count--) {
 | 
						for (; count > 0; count--) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* configure read DMA */
 | 
							/* configure read DMA */
 | 
				
			||||||
		DMA2->LIFCR = 0xffffffff;
 | 
					//		DMA2->LIFCR = 0xffffffff;
 | 
				
			||||||
		DMA2->HIFCR = 0xffffffff;
 | 
					//		DMA2->HIFCR = 0xffffffff;
 | 
				
			||||||
		DMASTREAM->NDTR = 0;
 | 
					//		DMASTREAM->NDTR = 0;
 | 
				
			||||||
		DMASTREAM->FCR |= 0x21 | 0x3 | (1<<DMA_SxFCR_DMDIS);
 | 
					//		DMASTREAM->FCR = DMA_SxFCR_FTH_0 | DMA_SxFCR_FTH_1 | DMA_SxFCR_DMDIS;
 | 
				
			||||||
		DMASTREAM->M0AR = (uint32_t)(&buffer_sdio);
 | 
					//		DMASTREAM->M0AR = (uint32_t)(buff);
 | 
				
			||||||
		DMASTREAM->PAR = (uint32_t)&(SDIO->FIFO);
 | 
					//		DMASTREAM->PAR = (uint32_t)&(SDIO->FIFO);
 | 
				
			||||||
		DMASTREAM->CR = DMAP2M | DMA_SxCR_PL_1 | DMA_SxCR_PL_1;
 | 
					//		DMASTREAM->CR = DMAP2M | DMA_SxCR_PL_1 | DMA_SxCR_PL_1;
 | 
				
			||||||
		DMASTREAM->CR |= DMA_SxCR_EN;
 | 
					//		DMASTREAM->CR |= DMA_SxCR_EN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		SDIO->DLEN = (1 << BLOCKSIZE);
 | 
							SDIO->DLEN = (1 << BLOCKSIZE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -187,29 +194,29 @@ DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count){
 | 
				
			|||||||
		SDIO->DCTRL = (BLOCKSIZE<<4) | SDIO_DCTRL_DTDIR | SDIO_DCTRL_DMAEN | SDIO_DCTRL_DTEN;
 | 
							SDIO->DCTRL = (BLOCKSIZE<<4) | SDIO_DCTRL_DTDIR | SDIO_DCTRL_DMAEN | SDIO_DCTRL_DTEN;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		debug=0;
 | 
							debug=0;
 | 
				
			||||||
//		counter = 0;
 | 
							counter = 0;
 | 
				
			||||||
//		while (counter < (1<<(BLOCKSIZE-2)) || !(SDIO->STA & (SDIO_STA_DBCKEND | SDIO_STA_DATAEND))) { // TODO: Handle errors
 | 
							while (counter < (1<<(BLOCKSIZE-2)) || !(SDIO->STA & (SDIO_STA_DBCKEND | SDIO_STA_DATAEND))) { // TODO: Handle errors
 | 
				
			||||||
//			if (SDIO->STA & (SDIO_STA_DCRCFAIL | SDIO_STA_DTIMEOUT | SDIO_STA_STBITERR))
 | 
								if (SDIO->STA & (SDIO_STA_DCRCFAIL | SDIO_STA_DTIMEOUT | SDIO_STA_STBITERR))
 | 
				
			||||||
//			{
 | 
								{
 | 
				
			||||||
//				return RES_ERROR;
 | 
									return RES_ERROR;
 | 
				
			||||||
//			}
 | 
								}
 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//			if (SDIO->STA & SDIO_STA_RXDAVL) {
 | 
					 | 
				
			||||||
//				counter++;
 | 
					 | 
				
			||||||
//				fifo = SDIO->FIFO;
 | 
					 | 
				
			||||||
//				*(buff++) = (BYTE)(fifo & 0xFF);
 | 
					 | 
				
			||||||
//				fifo >>= 8;
 | 
					 | 
				
			||||||
//				*(buff++) = (BYTE)(fifo & 0xFF);
 | 
					 | 
				
			||||||
//				fifo >>= 8;
 | 
					 | 
				
			||||||
//				*(buff++) = (BYTE)(fifo & 0xFF);
 | 
					 | 
				
			||||||
//				fifo >>= 8;
 | 
					 | 
				
			||||||
//				*(buff++) = (BYTE)(fifo & 0xFF);
 | 
					 | 
				
			||||||
//			}
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
//		}
 | 
					 | 
				
			||||||
//		if (SDIO->STA & SDIO_STA_DCRCFAIL) return RES_ERROR;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		while(DMASTREAM->CR & DMA_SxCR_EN);
 | 
								if (SDIO->STA & SDIO_STA_RXDAVL) {
 | 
				
			||||||
 | 
									counter++;
 | 
				
			||||||
 | 
									fifo = SDIO->FIFO;
 | 
				
			||||||
 | 
									*(buff++) = (BYTE)(fifo & 0xFF);
 | 
				
			||||||
 | 
									fifo >>= 8;
 | 
				
			||||||
 | 
									*(buff++) = (BYTE)(fifo & 0xFF);
 | 
				
			||||||
 | 
									fifo >>= 8;
 | 
				
			||||||
 | 
									*(buff++) = (BYTE)(fifo & 0xFF);
 | 
				
			||||||
 | 
									fifo >>= 8;
 | 
				
			||||||
 | 
									*(buff++) = (BYTE)(fifo & 0xFF);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if (SDIO->STA & SDIO_STA_DCRCFAIL) return RES_ERROR;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							//while(DMASTREAM->CR & DMA_SxCR_EN);
 | 
				
			||||||
		while(1) {
 | 
							while(1) {
 | 
				
			||||||
			__DSB();
 | 
								__DSB();
 | 
				
			||||||
			__DMB();
 | 
								__DMB();
 | 
				
			||||||
@@ -230,10 +237,6 @@ DRESULT SDIO_disk_read(BYTE *buff, DWORD sector, UINT count){
 | 
				
			|||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		DMASTREAM->CR = 0x0;
 | 
					 | 
				
			||||||
		while (DMASTREAM->CR);
 | 
					 | 
				
			||||||
		__asm("dsb");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		if (card_info.type == SD_V2_HC) {
 | 
							if (card_info.type == SD_V2_HC) {
 | 
				
			||||||
			addr++;
 | 
								addr++;
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
@@ -398,7 +401,7 @@ int SDIO_get_response(uint8_t expectedCMD, uint8_t typeOfAns, uint32_t *response
 | 
				
			|||||||
			return -CTIMEOUT;
 | 
								return -CTIMEOUT;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	//Valid Respone Received
 | 
						//Valid Respone Received
 | 
				
			||||||
	if (((SDIO->RESPCMD & SDIO_RESPCMD_RESPCMD) != expectedCMD) && expectedCMD != 0xff)
 | 
						if (((SDIO->RESPCMD & SDIO_RESPCMD_RESPCMD) != expectedCMD) && (expectedCMD != 0xff))
 | 
				
			||||||
		return -1; //Not the expected respose
 | 
							return -1; //Not the expected respose
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	//If case of a correct Response
 | 
						//If case of a correct Response
 | 
				
			||||||
@@ -438,7 +441,6 @@ ACMD41_RESP_t SDIO_init_card_ACMD41(uint8_t HCS){
 | 
				
			|||||||
	uint32_t response;
 | 
						uint32_t response;
 | 
				
			||||||
	int retry = 0x20;
 | 
						int retry = 0x20;
 | 
				
			||||||
	if (SDIO_switch_appmode_CMD55()) return ACMD41_RESP_ERR;
 | 
						if (SDIO_switch_appmode_CMD55()) return ACMD41_RESP_ERR;
 | 
				
			||||||
 | 
					 | 
				
			||||||
	do {
 | 
						do {
 | 
				
			||||||
		SDIO_send_cmd(41, (HCS ? (1<<30) : 0) | (1<<28) | (1<<20) |(1<<21)|(1<<22) |(1<<23)|(1<<19), SHORT_ANS);
 | 
							SDIO_send_cmd(41, (HCS ? (1<<30) : 0) | (1<<28) | (1<<20) |(1<<21)|(1<<22) |(1<<23)|(1<<19), SHORT_ANS);
 | 
				
			||||||
		if (!SDIO_get_response(0xFF, SHORT_ANS, &response)) {
 | 
							if (!SDIO_get_response(0xFF, SHORT_ANS, &response)) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,13 +12,14 @@
 | 
				
			|||||||
//4 bit: 4
 | 
					//4 bit: 4
 | 
				
			||||||
#define BUSWIDTH  4     //4
 | 
					#define BUSWIDTH  4     //4
 | 
				
			||||||
//Initial Transfer CLK (ca. 400kHz)
 | 
					//Initial Transfer CLK (ca. 400kHz)
 | 
				
			||||||
#define INITCLK   120   //120
 | 
					#define INITCLK   130   //120
 | 
				
			||||||
//Working CLK (Maximum)
 | 
					//Working CLK (Maximum)
 | 
				
			||||||
#define WORKCLK   255    //0
 | 
					#define WORKCLK   255    //0
 | 
				
			||||||
//Data Timeout in CLK Cycles
 | 
					//Data Timeout in CLK Cycles
 | 
				
			||||||
#define DTIMEOUT  0x3000   //150
 | 
					#define DTIMEOUT  0x3000   //150
 | 
				
			||||||
//DMA Stream used for TX and RX DMA2 Stream 3 or 6 possible
 | 
					//DMA Stream used for TX and RX DMA2 Stream 3 or 6 possible
 | 
				
			||||||
#define DMASTREAM DMA2_Stream6
 | 
					// Currently not used due to possible misalignment of the data buffer.
 | 
				
			||||||
 | 
					//#define DMASTREAM DMA2_Stream6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Port Definitions */
 | 
					/* Port Definitions */
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										20
									
								
								hardfault/hardfault_prehandler.S
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								hardfault/hardfault_prehandler.S
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
				
			|||||||
 | 
					/* Preliminary Header: Author: Mario Huettel */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.syntax unified
 | 
				
			||||||
 | 
					.cpu cortex-m4
 | 
				
			||||||
 | 
					.thumb
 | 
				
			||||||
 | 
					.type HardFault_PreHandler, %function
 | 
				
			||||||
 | 
					.global HardFault_PreHandler
 | 
				
			||||||
 | 
					.type HardFault_PreHandler, %function
 | 
				
			||||||
 | 
					HardFault_PreHandler:
 | 
				
			||||||
 | 
					TST LR, #4 // Test bit 2. If active => PSP was used, else MSP
 | 
				
			||||||
 | 
					ITE EQ
 | 
				
			||||||
 | 
					MRSEQ R0, MSP // Bit not set => MSP as argument
 | 
				
			||||||
 | 
					MRSNE R0, PSP // Bit set => PSP
 | 
				
			||||||
 | 
					LDR R1, =HardFault_Handler
 | 
				
			||||||
 | 
					BX R1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//.weak HardFault_Handler
 | 
				
			||||||
 | 
					//.thumb_set HardFault_Handler, HardFault_Handler_Default
 | 
				
			||||||
 | 
					//HardFault_Handler_Default:
 | 
				
			||||||
 | 
					//B HardFault_Handler_Default
 | 
				
			||||||
@@ -98,7 +98,7 @@
 | 
				
			|||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define	_USE_LFN	0
 | 
					#define	_USE_LFN	1
 | 
				
			||||||
#define	_MAX_LFN	255
 | 
					#define	_MAX_LFN	255
 | 
				
			||||||
/* The _USE_LFN switches the support of long file name (LFN).
 | 
					/* The _USE_LFN switches the support of long file name (LFN).
 | 
				
			||||||
/
 | 
					/
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										54
									
								
								main.c
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								main.c
									
									
									
									
									
								
							@@ -10,6 +10,7 @@
 | 
				
			|||||||
#include <fatfs/diskio.h>
 | 
					#include <fatfs/diskio.h>
 | 
				
			||||||
#include <uart/uart.h>
 | 
					#include <uart/uart.h>
 | 
				
			||||||
#include <stdio.h>
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <stdint.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define OUTPUT(pin)  (0b01 << (pin * 2))
 | 
					#define OUTPUT(pin)  (0b01 << (pin * 2))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,24 +18,24 @@ FATFS SDfs;
 | 
				
			|||||||
FIL file;
 | 
					FIL file;
 | 
				
			||||||
DIR root;
 | 
					DIR root;
 | 
				
			||||||
volatile int w;
 | 
					volatile int w;
 | 
				
			||||||
 | 
					volatile uint32_t sdio_wait;
 | 
				
			||||||
	DSTATUS SDIO_initialize();
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
int initreq = 0xFF;
 | 
					int initreq = 0xFF;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
int main() {
 | 
					int main() {
 | 
				
			||||||
	char buff[100];
 | 
						char buff[1024];
 | 
				
			||||||
	char *name;
 | 
						char *name;
 | 
				
			||||||
	FILINFO fno;
 | 
						FILINFO fno;
 | 
				
			||||||
	RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
 | 
						RCC->AHB1ENR |= RCC_AHB1ENR_GPIOAEN;
 | 
				
			||||||
	__DSB();
 | 
						__DSB();
 | 
				
			||||||
	GPIOD->MODER |= OUTPUT(12) | OUTPUT(13);
 | 
						GPIOA->MODER |= OUTPUT(6) | OUTPUT(7);
 | 
				
			||||||
 | 
						GPIOA->ODR |= (1<<7);
 | 
				
			||||||
	SysTick_Config(8*1680000);
 | 
						SysTick_Config(8*1680000);
 | 
				
			||||||
	// f_mount(&SDfs, "0:/", 1);
 | 
						// f_mount(&SDfs, "0:/", 1);
 | 
				
			||||||
	w = 0;
 | 
						w = 0;
 | 
				
			||||||
	initUART();
 | 
						initUART();
 | 
				
			||||||
	setvbuf(stdout, NULL, _IONBF, 0);
 | 
						setvbuf(stdout, NULL, _IONBF, 0);
 | 
				
			||||||
	while(w<10);
 | 
						//while(w<10);
 | 
				
			||||||
	initreq = f_mount(&SDfs, "0:/", 1);
 | 
						initreq = f_mount(&SDfs, "0:/", 1);
 | 
				
			||||||
	while(initreq);
 | 
						while(initreq);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -43,16 +44,16 @@ int main() {
 | 
				
			|||||||
		if (!f_readdir(&root, &fno))
 | 
							if (!f_readdir(&root, &fno))
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			name = fno.fname;
 | 
								name = fno.fname;
 | 
				
			||||||
			initreq = f_open(&file, _T("test.txt"), FA_READ);
 | 
								initreq = f_open(&file, name, FA_READ);
 | 
				
			||||||
				if (initreq == FR_OK) {
 | 
									if (initreq == FR_OK) {
 | 
				
			||||||
					f_gets(buff, sizeof(buff), &file);
 | 
										f_gets(buff, sizeof(buff), &file);
 | 
				
			||||||
					printf("test.txt:\r\n%s\r\n", buff);
 | 
										printf("%s:\r\n%s\r\n",name, buff);
 | 
				
			||||||
					f_close(&file);
 | 
										f_close(&file);
 | 
				
			||||||
				}
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
fflush(stdout);
 | 
					//fflush(stdout);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
while(1);
 | 
					while(1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -60,8 +61,41 @@ while(1);
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void HardFault_Handler(uint32_t *stack) {
 | 
				
			||||||
 | 
					//	  unsigned int stacked_r0;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_r1;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_r2;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_r3;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_r12;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_lr;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_pc;
 | 
				
			||||||
 | 
					//	  unsigned int stacked_psr;
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	  stacked_r0 =  stack[0];
 | 
				
			||||||
 | 
					//	  stacked_r1 =  stack[1];
 | 
				
			||||||
 | 
					//	  stacked_r2 =  stack[2];
 | 
				
			||||||
 | 
					//	  stacked_r3 =  stack[3];
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					//	  stacked_r12 =  stack[4];
 | 
				
			||||||
 | 
					//	  stacked_lr =  stack[5];
 | 
				
			||||||
 | 
					//	  stacked_pc =  stack[6];
 | 
				
			||||||
 | 
					//	  stacked_psr =  stack[7];
 | 
				
			||||||
 | 
						GPIOA->MODER |= OUTPUT(6) | OUTPUT(7);
 | 
				
			||||||
 | 
						GPIOA->ODR |= (1<<6) | (1<<7);
 | 
				
			||||||
 | 
						while(1);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void SysTick_Handler()
 | 
					void SysTick_Handler()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	GPIOD->ODR ^= (1<<12);
 | 
						GPIOA->ODR ^= (1<<6)|(1<<7);
 | 
				
			||||||
	w++;
 | 
						w++;
 | 
				
			||||||
 | 
						sdio_wait++;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void SDIO_wait_ms(unsigned int i) {
 | 
				
			||||||
 | 
						sdio_wait = 0;
 | 
				
			||||||
 | 
						while(sdio_wait<i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -37,7 +37,7 @@ _estack = 0x20020000;    /* end of 128K RAM on AHB bus*/
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/* Generate a link error if heap and stack don't fit into RAM */
 | 
					/* Generate a link error if heap and stack don't fit into RAM */
 | 
				
			||||||
_Min_Heap_Size = 0X0000;      /* required amount of heap (DEFAULT 0) */
 | 
					_Min_Heap_Size = 0X0000;      /* required amount of heap (DEFAULT 0) */
 | 
				
			||||||
_Min_Stack_Size = 0x400 ; /* required amount of stack */
 | 
					_Min_Stack_Size = 0x1000 ; /* required amount of stack */
 | 
				
			||||||
/* recommended min stack size for printf=0x2000, orig = 0x400 */
 | 
					/* recommended min stack size for printf=0x2000, orig = 0x400 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Specify the memory areas */
 | 
					/* Specify the memory areas */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@
 | 
				
			|||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerConnectionAddress" value=""/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerConnectionAddress" value=""/>
 | 
				
			||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDebugInterface" value="jtag"/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDebugInterface" value="jtag"/>
 | 
				
			||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceEndianness" value="little"/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceEndianness" value="little"/>
 | 
				
			||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceName" value="STM32F407VG"/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceName" value="STM32F407VE"/>
 | 
				
			||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceSpeed" value="1000"/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerDeviceSpeed" value="1000"/>
 | 
				
			||||||
<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerExecutable" value="JLinkGDBServer"/>
 | 
					<stringAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerExecutable" value="JLinkGDBServer"/>
 | 
				
			||||||
<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerGdbPortNumber" value="2331"/>
 | 
					<intAttribute key="ilg.gnuarmeclipse.debug.gdbjtag.jlink.gdbServerGdbPortNumber" value="2331"/>
 | 
				
			||||||
@@ -79,5 +79,5 @@
 | 
				
			|||||||
</listAttribute>
 | 
					</listAttribute>
 | 
				
			||||||
<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<memoryBlockExpressionList context="Context string">
<memoryBlockExpression address="536872736" label="0x20000720"/>
</memoryBlockExpressionList>
"/>
 | 
					<stringAttribute key="org.eclipse.dsf.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<memoryBlockExpressionList context="Context string">
<memoryBlockExpression address="536872736" label="0x20000720"/>
</memoryBlockExpressionList>
"/>
 | 
				
			||||||
<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
 | 
					<stringAttribute key="process_factory_id" value="org.eclipse.cdt.dsf.gdb.GdbProcessFactory"/>
 | 
				
			||||||
<stringAttribute key="saved_expressions<seperator>Unknown" value="0x20000720,0x20000920,0x20000c98,0x20000e98,0x20000ec98,buffer_sdio"/>
 | 
					<stringAttribute key="saved_expressions<seperator>Unknown" value="0x20000720,0x20000920,0x20000c98,0x20000e98,0x20000ec98,buffer_sdio,buff_sdio,sdio_buff"/>
 | 
				
			||||||
</launchConfiguration>
 | 
					</launchConfiguration>
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user