2025-02-15 11:05:28 -05:00

182 lines
4.3 KiB
C

/**
*
* \file
*
* \brief This module contains SAMD21 BSP APIs implementation.
*
* Copyright (c) 2018 Atmel Corporation. All rights reserved.
*
* \asf_license_start
*
* \page License
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* 3. The name of Atmel may not be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
* EXPRESSLY AND SPECIFICALLY DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* \asf_license_stop
*
*/
#include "bsp/include/nm_bsp.h"
#include "common/include/nm_common.h"
#include "timer.h"
#include "define.h"
#include "BoardCfg.h"
//#include <plib.h>
//#include "atmel_start.h"
//#include "winc_init.h"
#ifndef CONF_WINC_EXT_INT_PIN
#define CONF_WINC_EXT_INT_PIN 0
#endif
static tpfNmBspIsr gpfIsr = NULL;
void __ISR(_EXTERNAL_0_VECTOR , ipl3) chip_isr(void)
//static void chip_isr(void)
{
if (gpfIsr)
{
gpfIsr();
}
IFS0bits.INT0IF = 0;
}
/*
* @fn nm_bsp_init
* @brief Initialize BSP
* @return 0 in case of success and -1 in case of failure
*/
sint8 nm_bsp_init(void)
{
gpfIsr = NULL;
//
//JFM Not necessary, we know our timer base is 1ms...
// /* Make sure a 1ms Systick is configured. */
// if (!(SysTick->CTRL & SysTick_CTRL_ENABLE_Msk && SysTick->CTRL & SysTick_CTRL_TICKINT_Msk)) {
// delay_init(SysTick);
// }
return M2M_SUCCESS;
}
/**
* @fn nm_bsp_deinit
* @brief De-iInitialize BSP
* @return 0 in case of success and -1 in case of failure
*/
sint8 nm_bsp_deinit(void)
{
return M2M_SUCCESS;
}
/**
* @fn nm_bsp_reset
* @brief Reset NMC1500 SoC by setting CHIP_EN and RESET_N signals low,
* CHIP_EN high then RESET_N high
*/
void nm_bsp_reset(void)
{
// GP_DEBUG_1_PIN = 1;
WIFI_CHP_EN_PIN = 0;
WIFI_CHP_RST_PIN = 0;
// Sleep(1); //JFM
Sleep(100);
WIFI_CHP_EN_PIN = 1;
// Sleep(5); JFM
Sleep(150);
WIFI_CHP_RST_PIN = 1;
// GP_DEBUG_1_PIN = 0;
// gpio_set_pin_level(CONF_WINC_PIN_CHIP_ENABLE, false);
// gpio_set_pin_level(CONF_WINC_PIN_RESET, false);
// nm_bsp_sleep(1);
// gpio_set_pin_level(CONF_WINC_PIN_CHIP_ENABLE, true);
// nm_bsp_sleep(5);
// gpio_set_pin_level(CONF_WINC_PIN_RESET, true);
}
/*
* @fn nm_bsp_sleep
* @brief Sleep in units of mSec
* @param[IN] u32TimeMsec
* Time in milliseconds
*/
void nm_bsp_sleep(uint32 u32TimeMsec)
{
Sleep(u32TimeMsec);
// while (u32TimeMsec--) {
// delay_ms(1);
// }
}
/**
* \internal Get the PIO hardware instance
*
* \param[in] pin The PIO pin
*
* \return The instance of PIO hardware
*/
/*
* @fn nm_bsp_register_isr
* @brief Register interrupt service routine
* @param[IN] pfIsr
* Pointer to ISR handler
*/
void nm_bsp_register_isr(tpfNmBspIsr pfIsr)
{
gpfIsr = pfIsr;
//
// ext_irq_register(CONF_WINC_EXT_INT_PIN, chip_isr);
}
/*
* @fn nm_bsp_interrupt_ctrl
* @brief Enable/Disable interrupts
* @param[IN] u8Enable
* '0' disable interrupts. '1' enable interrupts
*/
void nm_bsp_interrupt_ctrl(uint8 u8Enable)
{
if(u8Enable == 0)
{
IEC0bits.INT0IE = 0;
}
else
{
IEC0bits.INT0IE = 1;
}
// _ext_irq_enable(CONF_WINC_EXT_INT_PIN, u8Enable);
}