210 lines
6.0 KiB
C
210 lines
6.0 KiB
C
/**
|
|
******************************************************************************
|
|
* @file FSMC/NAND/main.c
|
|
* @author MCD Application Team
|
|
* @version V3.1.0
|
|
* @date 06/19/2009
|
|
* @brief Main program body
|
|
******************************************************************************
|
|
* @copy
|
|
*
|
|
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
|
|
* TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
|
|
* DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
|
|
* FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
|
|
* CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
*
|
|
* <h2><center>© COPYRIGHT 2009 STMicroelectronics</center></h2>
|
|
*/
|
|
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "fsmc_nand.h"
|
|
#include "stm32f10x.h"
|
|
#include "stm32f10x_tim.h"
|
|
/** @addtogroup STM32F10x_StdPeriph_Examples
|
|
* @{
|
|
*/
|
|
|
|
/** @addtogroup FSMC_NAND
|
|
* @{
|
|
*/
|
|
|
|
/* Private typedef -----------------------------------------------------------*/
|
|
/* Private define ------------------------------------------------------------*/
|
|
#define BUFFER_SIZE 0x400
|
|
#define NAND_ST_MakerID 0XEC
|
|
#define NAND_ST_DeviceID 0xF1
|
|
|
|
/* Private macro -------------------------------------------------------------*/
|
|
/* Private variables ---------------------------------------------------------*/
|
|
NAND_IDTypeDef NAND_ID;
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
NAND_ADDRESS WriteReadAddr;
|
|
uint8_t TxBuffer[BUFFER_SIZE], RxBuffer[BUFFER_SIZE];
|
|
__IO uint32_t PageNumber = 2, WriteReadStatus = 0, status= 0;
|
|
uint32_t j = 0;
|
|
uint64_t uTick = 0;
|
|
/* Private function prototypes -----------------------------------------------*/
|
|
void RCC_Configuration(void);
|
|
void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLenght, uint32_t Offset);
|
|
|
|
void TIM3_Configuration(void)
|
|
{
|
|
/*
|
|
((1+TIM_Prescaler )/72M)*(1+TIM_Period )=((1+35999)/72M)*(1+2000)=1 second
|
|
|
|
*/
|
|
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
|
|
TIM_TimeBaseStructure.TIM_Period = 3;
|
|
TIM_TimeBaseStructure.TIM_Prescaler = 1;
|
|
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
|
|
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
|
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
|
|
TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE);
|
|
TIM_ARRPreloadConfig(TIM3, DISABLE);
|
|
TIM_Cmd(TIM3, ENABLE);// open timer
|
|
}
|
|
|
|
/* Private functions ---------------------------------------------------------*/
|
|
|
|
/**
|
|
* @brief Main program.
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
int main(void)
|
|
{
|
|
RCC_ClocksTypeDef get_rcc_clock;
|
|
uint64_t uTickOld;
|
|
/* System Clocks Configuration */
|
|
RCC_Configuration();
|
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
|
|
/* FSMC Initialization */
|
|
FSMC_NAND_Init();
|
|
/* NAND read ID command */
|
|
FSMC_NAND_ReadID(&NAND_ID);
|
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
|
|
|
|
GPIO_InitTypeDef GPIO_InitStructure;
|
|
|
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
|
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
|
GPIO_Init(GPIOC, &GPIO_InitStructure);
|
|
|
|
RCC_GetClocksFreq(&get_rcc_clock);
|
|
TIM3_Configuration();
|
|
NVIC_Configue();
|
|
/* Verify the NAND ID */
|
|
uTick = uTick;
|
|
|
|
if((NAND_ID.Maker_ID == NAND_ST_MakerID) && (NAND_ID.Device_ID == NAND_ST_DeviceID))
|
|
{
|
|
/* NAND memory address to write to */
|
|
WriteReadAddr.Zone = 0x00;
|
|
WriteReadAddr.Block = 0x00;
|
|
WriteReadAddr.Page = 0x00;
|
|
/* Erase the NAND first Block */
|
|
status = FSMC_NAND_EraseBlock(WriteReadAddr);
|
|
/* Write data to FSMC NAND memory */
|
|
/* Fill the buffer to send */
|
|
Fill_Buffer(TxBuffer, BUFFER_SIZE , 0x66);
|
|
uTickOld = uTick;
|
|
|
|
status = FSMC_NAND_WriteSmallPage(TxBuffer, WriteReadAddr, PageNumber);
|
|
/* Read back the written data */
|
|
status = FSMC_NAND_ReadSmallPage (RxBuffer, WriteReadAddr, PageNumber);
|
|
uTick = uTick -uTickOld;
|
|
uTick = uTick;
|
|
/* Verify the written data */
|
|
}
|
|
while(1)
|
|
{
|
|
}
|
|
}
|
|
void TIM3_IRQHandler(void)
|
|
{
|
|
static int x = 0;
|
|
if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) {
|
|
/* Clear TIM3 update interrupt */
|
|
TIM_ClearFlag(TIM3, TIM_IT_Update);
|
|
//GPIO_WriteBit(GPIOC, GPIO_Pin_7, x);
|
|
//x = ~x;
|
|
}
|
|
uTick ++;
|
|
}
|
|
void NVIC_Configue(void)
|
|
{
|
|
NVIC_InitTypeDef NVIC_InitStructure;
|
|
|
|
|
|
/* Enable the TIM3 gloabal Interrupt*/
|
|
NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;
|
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
|
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
|
NVIC_Init(&NVIC_InitStructure);
|
|
}
|
|
/**
|
|
* @brief Configures the different system clocks.
|
|
* @param None
|
|
* @retval None
|
|
*/
|
|
void RCC_Configuration(void)
|
|
{
|
|
/* Setup the microcontroller system. Initialize the Embedded Flash Interface,
|
|
initialize the PLL and update the SystemFrequency variable. */
|
|
SystemInit();
|
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
|
|
|
|
}
|
|
|
|
/**
|
|
* Function name : Fill_Buffer
|
|
* @brief Fill the buffer
|
|
* @param pBuffer: pointer on the Buffer to fill
|
|
* @param BufferSize: size of the buffer to fill
|
|
* @param Offset: first value to fill on the Buffer
|
|
*/
|
|
void Fill_Buffer(uint8_t *pBuffer, uint16_t BufferLenght, uint32_t Offset)
|
|
{
|
|
uint16_t IndexTmp = 0;
|
|
|
|
/* Put in global buffer same values */
|
|
for (IndexTmp = 0; IndexTmp < BufferLenght; IndexTmp++ )
|
|
{
|
|
pBuffer[IndexTmp] = IndexTmp + Offset;
|
|
}
|
|
}
|
|
|
|
#ifdef USE_FULL_ASSERT
|
|
|
|
/**
|
|
* @brief Reports the name of the source file and the source line number
|
|
* where the assert_param error has occurred.
|
|
* @param file: pointer to the source file name
|
|
* @param line: assert_param error line source number
|
|
* @retval None
|
|
*/
|
|
void assert_failed(uint8_t* file, uint32_t line)
|
|
{
|
|
/* User can add his own implementation to report the file name and line number,
|
|
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
|
|
|
|
/* Infinite loop */
|
|
while (1)
|
|
{
|
|
}
|
|
}
|
|
#endif
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/**
|
|
* @}
|
|
*/
|
|
|
|
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
|