示例#1
0
/**
 * @brief  Disables dynamically FSMC_NAND ECC feature.
 * @param  Device: Pointer to NAND device instance
 * @param  ECCval: Pointer to ECC value
 * @param  Bank: NAND bank number
 * @param  Timeout: Timeout wait value  
 * @retval HAL status
 */
HAL_StatusTypeDef FSMC_NAND_GetECC(FSMC_NAND_TypeDef *Device, uint32_t *ECCval,
		uint32_t Bank, uint32_t Timeout) {
	uint32_t tickstart = 0U;

	/* Check the parameters */
	assert_param(IS_FSMC_NAND_DEVICE(Device));
	assert_param(IS_FSMC_NAND_BANK(Bank));

	/* Get tick */
	tickstart = HAL_GetTick();

	/* Wait until FIFO is empty */
	while (__FSMC_NAND_GET_FLAG(Device, Bank, FSMC_FLAG_FEMPT) == RESET) {
		/* Check for the Timeout */
		if (Timeout != HAL_MAX_DELAY) {
			if ((Timeout == 0U) || ((HAL_GetTick() - tickstart) > Timeout)) {
				return HAL_TIMEOUT;
			}
		}
	}

	if (Bank == FSMC_NAND_BANK2) {
		/* Get the ECCR2 register value */
		*ECCval = (uint32_t) Device->ECCR2;
	} else {
		/* Get the ECCR3 register value */
		*ECCval = (uint32_t) Device->ECCR3;
	}

	return HAL_OK;
}
示例#2
0
/**
  * @brief  This function handles NAND device interrupt request.
  * @param  hnand: pointer to a NAND_HandleTypeDef structure that contains
  *                the configuration information for NAND module.
  * @retval HAL status
*/
void HAL_NAND_IRQHandler(NAND_HandleTypeDef *hnand)
{
  /* Check NAND interrupt Rising edge flag */
  if(__FSMC_NAND_GET_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_RISING_EDGE))
  {
    /* NAND interrupt callback*/
    HAL_NAND_ITCallback(hnand);
  
    /* Clear NAND interrupt Rising edge pending bit */
    __FSMC_NAND_CLEAR_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_RISING_EDGE);
  }
  
  /* Check NAND interrupt Level flag */
  if(__FSMC_NAND_GET_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_LEVEL))
  {
    /* NAND interrupt callback*/
    HAL_NAND_ITCallback(hnand);
  
    /* Clear NAND interrupt Level pending bit */
    __FSMC_NAND_CLEAR_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_LEVEL);
  }

  /* Check NAND interrupt Falling edge flag */
  if(__FSMC_NAND_GET_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_FALLING_EDGE))
  {
    /* NAND interrupt callback*/
    HAL_NAND_ITCallback(hnand);
  
    /* Clear NAND interrupt Falling edge pending bit */
    __FSMC_NAND_CLEAR_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_FALLING_EDGE);
  }
  
  /* Check NAND interrupt FIFO empty flag */
  if(__FSMC_NAND_GET_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_FEMPT))
  {
    /* NAND interrupt callback*/
    HAL_NAND_ITCallback(hnand);
  
    /* Clear NAND interrupt FIFO empty pending bit */
    __FSMC_NAND_CLEAR_FLAG(hnand->Instance, hnand->Init.NandBank, FSMC_FLAG_FEMPT);
  }  

}