Untitled
unknown
plain_text
2 years ago
6.0 kB
8
Indexable
/******************************************************************************
* @file main.c
* @version V1.00
* $Revision: 4 $
* $Date: 15/12/27 1:12p $
* @brief A project template for Nano103 MCU.
*
* @note
* Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "Nano103.h"
#include "uart.h"
#define PLLCON_SETTING CLK_PLLCON_36MHz_HXT
#define PLL_CLOCK 36000000
// 1ms = 1000us = 36000
#define delay_us(x) CLK_SysTickDelay(x)
#define delay_ms(x) CLK_SysTickDelay(x * 10000)
//###########################################
// Pin Defines
#define SW_EXTRA1 PB3
#define SW_EXTRA2 PC0
#define SW_DOOR_OPEN PB2
#define SW_ENABLE PB1
#define SW_MID PB0
#define SW_STRT PB5
#define SW_END PB4
#define RELAY_DOOR PC1
#define MTR_PWM PA9
#define MTR_EN PA14
#define MTR_EN_LEFT PA9
#define MTR_EN_RIGHT PA8
#define ACS712_DATA PA6
#define PIN_SCL PA5
#define PIN_SDA PA4
#define BT_RXD PA3
#define BT_TXD PA2
//###########################################
#define RXBUFSIZE 1024
uint8_t g_u8SendData[12] = {0};
uint8_t g_u8RecData[RXBUFSIZE] = {0};
volatile uint32_t g_u32comRbytes = 0;
volatile uint32_t g_u32comRhead = 0;
volatile uint32_t g_u32comRtail = 0;
volatile int32_t g_bWait = TRUE;
volatile int32_t g_i32pointer = 0;
void UART1_TEST_HANDLE(void);
char* msg = "Furkan\n";
void UART1_IRQHandler(void)
{
UART1_TEST_HANDLE();
}
void UART1_TEST_HANDLE()
{
uint8_t u8InChar=0xFF;
uint32_t u32IntSts= UART1->INTSTS;
/* Check Receive Data */
if((u32IntSts & UART_INTSTS_RDAIF_Msk) || (u32IntSts & UART_INTSTS_RXTOIF_Msk))
{
printf("\nInput:");
/* Get all the input characters */
while(UART_IS_RX_READY(UART1))
{
/* Get the character from UART Buffer */
u8InChar = UART_READ(UART1); /* Rx trigger level is 1 byte*/
printf("%c ", u8InChar);
if(u8InChar == '0')
{
g_bWait = FALSE;
}
/* Check if buffer full */
if(g_u32comRbytes < RXBUFSIZE)
{
/* Enqueue the character */
g_u8RecData[g_u32comRtail] = u8InChar;
g_u32comRtail = (g_u32comRtail == (RXBUFSIZE-1)) ? 0 : (g_u32comRtail+1);
g_u32comRbytes++;
}
}
printf("\nTransmission Test:");
}
/* Check Tx empty */
if(u32IntSts & UART_INTSTS_THREIF_Msk)
{
uint16_t tmp;
tmp = g_u32comRtail;
if(g_u32comRhead != tmp)
{
u8InChar = g_u8RecData[g_u32comRhead];
/* print the received char on screen */
UART_WRITE(UART1,u8InChar);
g_u32comRhead = (g_u32comRhead == (RXBUFSIZE-1)) ? 0 : (g_u32comRhead+1);
g_u32comRbytes--;
}
}
}
void SYS_Init(void)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock */
/*---------------------------------------------------------------------------------------------------------*/
/* Unlock protected registers */
SYS_UnlockReg();
/* Enable External XTAL (4~24 MHz) */
CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk);
//CLK->PWRCTL = (CLK->PWRCTL & ~CLK_PWRCTL_HXTEN_Msk) | (0x1 << CLK_PWRCTL_HXTEN_Pos); // HXT Enabled
/* Waiting for 12MHz clock ready */
CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk);
/* Switch HCLK clock source to HXT */
CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HXT,CLK_HCLK_CLK_DIVIDER(1));
//CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_HCLKSEL_Msk)|CLK_CLKSEL0_HCLKSEL_HXT;
/* Enable UART clock */
CLK_EnableModuleClock(UART1_MODULE);
/* Select UART clock source from HXT */
CLK_SetModuleClock(UART1_MODULE, CLK_CLKSEL2_UART1SEL_HXT, CLK_UART1_CLK_DIVIDER(1));
CLK->APBCLK |= CLK_APBCLK_UART1_EN;
/* Update System Core Clock */
/* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */
SystemCoreClockUpdate();
/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function */
/*---------------------------------------------------------------------------------------------------------*/
/* Set GPB multi-function pins for UART0 RXD and TXD */
//SYS->GPB_MFPL &= ~(SYS_GPB_MFPL_PB0MFP_Msk | SYS_GPB_MFPL_PB1MFP_Msk);
//SYS->GPB_MFPL |= (SYS_GPB_MFPL_PB0MFP_UART0_RXD | SYS_GPB_MFPL_PB1MFP_UART0_TXD);
SYS->GPA_MFPL &= ~(SYS_GPA_MFPL_PA2MFP_Msk | SYS_GPA_MFPL_PA3MFP_Msk);
SYS->GPA_MFPL |= (SYS_GPA_MFPL_PA3MFP_UART1_TXD | SYS_GPA_MFPL_PA2MFP_UART1_RXD);
/* Lock protected registers */
SYS_LockReg();
UART_Open(UART1, 9600);
UART1->LINE = (UART1->LINE &~ UART_LINE_RFITL_Msk) | UART_LINE_RFITL_8BYTES;
UART_SetTimeoutCnt(UART1,0x3E);
UART_ENABLE_INT(UART1, (UART_INTEN_RDAIEN_Msk | UART_INTEN_THREIEN_Msk | UART_INTEN_RXTOIEN_Msk));
NVIC_EnableIRQ(UART1_IRQn);
}
void GPIO_Init(void)
{
GPIO_SetMode(PC, BIT1, GPIO_PMD_OUTPUT);
GPIO_SetMode(PA, BIT15, GPIO_PMD_OUTPUT);
GPIO_SetMode(PA, BIT14, GPIO_PMD_OUTPUT);
GPIO_SetMode(PA, BIT9, GPIO_PMD_OUTPUT);
GPIO_SetMode(PA, BIT8, GPIO_PMD_OUTPUT);
RELAY_DOOR = 0;
MTR_PWM = 0;
MTR_EN = 1;
MTR_EN_LEFT = 0;
MTR_EN_RIGHT = 0;
}
int main()
{
SYS_Init();
GPIO_Init();
MTR_EN = 0;
MTR_PWM = 1;
MTR_EN_LEFT = 0;
MTR_EN_RIGHT = 0;
/* Got no where to go, just loop forever */
while(1)
{
//int i = 0;
for(int i = 0; msg[i] != '\0'; i++){
UART_WRITE(UART1, msg[i]);
}
printf("printf\n");
//UART_Write(UART1, "Furkan\n", 7);
/*
MTR_EN_LEFT = 1;
delay_ms(3000);
MTR_EN_LEFT = 0;
delay_ms(5000);
MTR_EN_RIGHT = 1;
delay_ms(3000);
MTR_EN_RIGHT = 0;
delay_ms(5000);
*/
/*
RELAY_DOOR = 0;
delay_ms(1000);
RELAY_DOOR = 1;
delay_ms(1000);
*/
delay_ms(5000);
}
}
/*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/
Editor is loading...