NANO130_H2Press/User_RS485Up(PB9冲突)/main.c

196 lines
5.3 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**************************************************************************//**
* @file main.c
* @version V3.00
* $Revision: 9 $
* $Date: 18/09/02 10:04a $
* @brief Show how to wake up system from Power-down mode by GPIO interrupt.
* @note
* Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved.
******************************************************************************/
#include "includes.h"
const uint8_t CONFIG_BOARD_SELF = CONFIG_BOARD_SINGLE;
// 启动原因代码
volatile uint32_t SYS_RSTSTS;
// 配置外设引脚、时钟等
static void Modules_Init()
{
Vcc_Init();
Clock_Init(); // 配置滴答时钟1ms
Console_Init();
SFlash_Init();
FRAM_Init();
Config_Init();
Wakeup_Init();
RF_Init();
BD_Init();
Sensor_Init();
Modbus_Init();
Sample_Init();
Battery_Init();
DTU_Init();
Key_Init();
Accelero_Init();
LCD_Init();
Watchdog_Init();
}
// 打开外设,配置中断等
static void Modules_Open()
{
Console_Open();
SFlash_Open();
FRAM_Open();
Config_Open();
Wakeup_Open();
RF_Open();
BD_Open();
Sensor_Open();
Modbus_Open();
Sample_Open();
Battery_Open();
DTU_Open();
Key_Open();
Accelero_Open();
LCD_MyOpen(); // form.h
Watchdog_Open();
}
void SYS_Init(void)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock */
/*---------------------------------------------------------------------------------------------------------*/
#if 0
/* Enable External XTAL (4~24 MHz), enable LXT for LCD */
CLK_EnableXtalRC(CLK_PWRCTL_HXT_EN_Msk | CLK_PWRCTL_LXT_EN_Msk | CLK_PWRCTL_LIRC_EN_Msk);
CLK_EnablePLL(CLK_PLLCTL_PLL_SRC_HXT, 36000000ul);
/* Waiting for PLL clock ready */
CLK_WaitClockReady(CLK_CLKSTATUS_HXT_STB_Msk | CLK_CLKSTATUS_LXT_STB_Msk | CLK_CLKSTATUS_LIRC_STB_Msk | CLK_CLKSTATUS_PLL_STB_Msk);
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_PLL, CLK_HCLK_CLK_DIVIDER(1));
#else
/* Enable External XTAL (4~24 MHz), enable LXT for LCD */
CLK_EnableXtalRC(CLK_PWRCTL_HXT_EN_Msk | CLK_PWRCTL_LXT_EN_Msk | CLK_PWRCTL_LIRC_EN_Msk);
/* Waiting for 12MHz clock ready */
CLK_WaitClockReady(CLK_CLKSTATUS_HXT_STB_Msk | CLK_CLKSTATUS_LXT_STB_Msk | CLK_CLKSTATUS_LIRC_STB_Msk);
/* Switch HCLK clock source to XTAL */
CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HXT, CLK_HCLK_CLK_DIVIDER(1));
/* Switch HCLK clock source to PLL */
CLK->CLKSEL0 &= (~CLK_CLKSEL0_HCLK_S_Msk);
CLK->CLKSEL0 |= CLK_CLKSEL0_HCLK_S_HXT;
#endif
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate PllClock, SystemCoreClock and CycylesPerUs automatically. */
SystemCoreClockUpdate();
Modules_Init();
}
/*---------------------------------------------------------------------------------------------------------*/
/* MAIN function */
/*---------------------------------------------------------------------------------------------------------*/
const uint8_t MEMORY_BYTE[] = {0x55, 0xAA, 0xCC, 0x33, 0xFF, 0x00};
int main(void)
{
uint32_t i, j, k;
uint8_t *sram = (uint8_t *) 0x60000000ul;
/* Unlock protected registers */
SYS_UnlockReg();
SYS_RSTSTS = SYS->RST_SRC & 0xB7;
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_POR_Msk) // 1
SYS->RST_SRC |= SYS_RST_SRC_RSTS_POR_Msk;
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_PAD_Msk) // 2
SYS->RST_SRC |= SYS_RST_SRC_RSTS_PAD_Msk;
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_WDT_Msk) // 4
SYS->RST_SRC |= SYS_RST_SRC_RSTS_WDT_Msk;
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_BOD_Msk) // 16
SYS->RST_SRC |= SYS_RST_SRC_RSTS_BOD_Msk;
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_SYS_Msk)
SYS->RST_SRC |= SYS_RST_SRC_RSTS_SYS_Msk; // 32
if(SYS_RSTSTS & SYS_RST_SRC_RSTS_CPU_Msk) // 128
SYS->RST_SRC |= SYS_RST_SRC_RSTS_CPU_Msk;
/* Init System, peripheral clock and multi-function I/O */
SYS_Init();
Modules_Open();
printf("\nSYS_RSTSTS = %d\n", SYS_RSTSTS);
#if 0
// SRAM Test
for(j = 0; j < 6; j++)
{
printf("\nSRAM write testing ... 0x%02X\n", MEMORY_BYTE[j]);
for(i = 0; i < SRAM_SIZE; i++)
sram[i] = MEMORY_BYTE[j];
printf("\nSRAM read testing ...\n");
for(i = 0, k = 0; i < SRAM_SIZE; i++)
{
if(sram[i] != MEMORY_BYTE[j])
{
printf("\nSRAM[%08X] = %02X != %02X\n", i, sram[i], MEMORY_BYTE[j]);
if(++k >= 10)
break;
}
}
}
printf("\nSRAM test finished\n");
#endif
SFlash_ReadID();
FRAM_ReadID();
/* Lock protected registers */
// SYS_LockReg();
HT1621_AllOn();
delay_ms(1000);
// 显示主界面
Form_Start();
DTU_Task(NULL);
// while(1)
// {
// printf("\n test print ....... \n");
// delay_ms(500);
// }
}
uint16_t Byte2IntS(uint8_t *buf, int pos)
{
return (uint16_t)(buf[pos] | (buf[pos + 1] << 8));
}
void Int2ByteS(uint8_t *buf, int pos, uint16_t val)
{
buf[pos] = (uint8_t) (val & 0xFF);
buf[pos + 1] = (uint8_t)((val >> 8) & 0xFF);
}
uint32_t Byte2IntL(uint8_t *buf, int pos)
{
return (uint32_t)(buf[pos] | (buf[pos + 1] << 8) | (buf[pos + 2] << 16) | (buf[pos + 3] << 24));
}
void Int2ByteL(uint8_t *buf, int pos, uint32_t val)
{
buf[pos] = (uint8_t)(val & 0xFF);
buf[pos + 1] = (uint8_t)((val >> 8) & 0xFF);
buf[pos + 2] = (uint8_t)((val >> 16) & 0xFF);
buf[pos + 3] = (uint8_t)((val >> 24) & 0xFF);
}
/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/