📄 main.c
字号:
/******************** (C) COPYRIGHT 2006 STMicroelectronics ********************
* File Name : main.c
* Author : jrl
* Date First Issued : 4/1/05
* Description : HDLC example software
********************************************************************************/
#include "71x_lib.h"
#include "timers.h"
#include <stdarg.h>
#include <stdio.h>
//for UART
#define Use_UART0
#define UARTX UART0
#define UART0_Rx_Pin (0x0001<<8) // TQFP 64: pin N?63 , TQFP 144 pin N?143
#define UART0_Tx_Pin (0x0001<<9) // TQFP 64: pin N?64 , TQFP 144 pin N?144
#define UARTX_Rx_Pin UART0_Rx_Pin
#define UARTX_Tx_Pin UART0_Tx_Pin
void UART_Printf(const char *format, ...)
{
static char buf[256];
va_list args;
va_start(args, format);
vsprintf(buf, format, args);
va_end(args);
// Configure the GPIO pins
GPIO_Config(GPIO0, UARTX_Tx_Pin, GPIO_AF_PP);
GPIO_Config(GPIO0, UARTX_Rx_Pin, GPIO_IN_TRI_CMOS);
// Configure the UART X
UART_OnOffConfig(UARTX, ENABLE); // Turn UARTX on
UART_FifoConfig(UARTX, DISABLE); // Disable FIFOs
UART_FifoReset(UARTX, UART_RxFIFO); // Reset the UART_RxFIFO
UART_FifoReset(UARTX, UART_TxFIFO); // Reset the UART_TxFIFO
UART_LoopBackConfig(UARTX, DISABLE); // Disable Loop Back
/* Configure the UARTX as following:
- Baudrate = 57600 Bps
- No parity
- 8 data bits
- 1 stop bit */
UART_Config(UARTX, 57600, UART_NO_PARITY, UART_1_StopBits, UARTM_8D);
UART_RxConfig(UARTX, ENABLE); // Enable Rx
UART_StringSend(UARTX, (u8 *)buf);
}
/*******************************************************************************
* Function Name : clks_init
* Description : Initialize device clocks
* Input : None
* Return : None
*******************************************************************************/
void CLKS_Init(void)
{
RCCU_MCLKConfig(RCCU_DEFAULT); // Configure MCLK = RCLK = 48M
RCCU_FCLKConfig(RCCU_RCLK_4); // Configure FCLK = RCLK / 4 = 12M
RCCU_PCLKConfig(RCCU_RCLK_2); // Configure PCLK = RCLK / 2
RCCU_Div2Config (ENABLE); //OSC input is divide by 2
RCCU_PLL1Config(RCCU_Mul_12, RCCU_Div_2); // Configure the PLL1 ( * 12 , / 2 )
while(RCCU_FlagStatus(RCCU_PLL1_LOCK) == RESET);// Wait PLL to lock
RCCU_RCLKSourceConfig(RCCU_PLL1_Output);
RCCU_PLL2Config(0x01, RCCU_Div_2); //configure PLL2 for HDLC clock
//setup timer2 (P0.13) for external HDLC clock connected to HCLK
// TIM_ClockSourceConfig (TIM2, TIM_INTERNAL );
// TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
// TIM_PWMOModeConfig (TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output
// TIM_CounterConfig(TIM2, TIM_START);
}
void IO_Init(void)
{
// setup GPIO 1.13 (HDLC HCLK pin) as input Tristate CMOS
GPIO_Config (GPIO1, 0x2000, GPIO_IN_TRI_CMOS);
// setup GPIO 1.14 (HDLC HRXD pin) as input Tristate CMOS
GPIO_Config (GPIO1, 0x4000, GPIO_IN_TRI_CMOS);
// setup GPIO 1.15 (HDLC HTXD pin) as output alternate Push-pull
GPIO_Config (GPIO1, 0x8000, GPIO_AF_PP);
// setup GPIO 0.13 (T2 OCMPA pin) as output alternate Push-pull
//GPIO_Config (GPIO0, 0x2000, GPIO_AF_PP);
}
/*******************************************************************************
* Function Name : EIC_Config
* Description : Enable the HDLC IRQChannel
* Input : None
* Return : None
*******************************************************************************/
void EIC_Config()
{
EIC_Init();
//EIC_FIQConfig(DISABLE);
HDLC_ClearInterruptStatus(0xFF);
EIC_IRQChannelConfig(XTI_IRQChannel, ENABLE); //changed本来是HCLD的终端编号
EIC_IRQChannelPriorityConfig(XTI_IRQChannel, 10);
EIC_IRQConfig(ENABLE);
}
void HDLC_XmitConfig(HDLC_TCKS Clock_Src, u16 Div, u8 Pre_Len, u8 Post_Len, HDLC_TCOD_ENC TCod, u16 Flag)
{
HDLC_XmitClockSourceConfig(Clock_Src);
Div = Div & 0x0FFF;
HDLC_XmitBaudrateConfig(Div-1);
HDLC_PreambleSequenceConfig(0xAAAA);
HDLC_PostambleSequenceConfig(0xAAAA);
Flag = Flag | TCod ;
if (Pre_Len > 0)
{
Pre_Len = Pre_Len - 1;
Flag |= HDLC_PREE;
Flag = Flag | ((Pre_Len<<4) & HDLC_NPREB_mask);
}
if (Post_Len > 0)
{
Post_Len = Post_Len -1;
Flag |= HDLC_POSE;
Flag = Flag | (Post_Len & HDLC_NPOSB_mask);
}
HDLC_Init_Xmit(Flag);
}
void HDLC_RecvConfig(HDLC_RCLKS Clock_Src, u8 Div, HDLC_TCOD_ENC TCod, u16 Flag, u32 PAdrress, u32 PMask)
{
u16 PAddressH = (PAdrress & 0xFFFF0000) >> 16;
u16 PAddressL = (PAdrress & 0x0000FFFF);
u16 PMaskH = (PMask & 0xFFFF0000) >> 16;
u16 PMaskL = (PMask & 0x0000FFFF);
HDLC_PAddressConfigH(PAddressH);
HDLC_PAddressMaskConfigH(PMaskH);
HDLC_PAddressConfigL(PAddressL);
HDLC_PAddressMaskConfigL(PMaskL);
//Set up Receiver
HDLC_Init_Recv(HDLC_PAE | TCod | HDLC_DPLLE | Flag);
HDLC_RecvClockSourceConfig(Clock_Src);
HDLC_RecvClockPrescalerConfig(Div-1); //APB1 PCLK1/3 = 4M
*(u32*)HDLC_RECEIVEBUFFER_BASE_LO = 0; //clear so a frame reject prints 0 data.
}
u8 RecvBuffer[256];
//u8 XmitBuffer[]={0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA};
u8 XmitBuffer[] = "aAAAAAbcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyZZZZZ";
u16 xmitRemain = 0, totalRecv = 0;
u8 *xmitAddr, *RecvAddr;
// for test
u16 frameSend = 0, XmitCount=0;
u16 frameRecv = 0, RecvCount=0;
//******************************************************************************
int Main(void)
{
//u32 byteSend = 0;
u16 RFlag = 0;
u16 IntMask = 0;
u32 i = 0;
u32 j = 0;
#ifdef DEBUG
debug();
#endif
//先前用中断实现拉底WENB
/////////
EIC_Config();
// Initialize the XTI
XTI_Init();
// Set Line 3 edge
XTI_LineModeConfig(XTI_Line9, XTI_RisingEdge);//对应P0.1口的中断
// Enable the External interrupts on line 3
XTI_LineConfig(XTI_Line9, ENABLE);
// Set the XTI mode
XTI_ModeConfig(XTI_Interrupt, ENABLE);
//Configure the P0.1
//GPIO_Config(GPIO0,0x0001<<0x01,GPIO_OUT_PP);
LCD_Test();
GPIO_Config(GPIO1, 0x1, GPIO_OUT_PP);
while(1)
{
for(i=0; i<0xffff; i++)
;
GPIO_WordWrite(GPIO1, GPIO_WordRead(GPIO1) ^ 0x1);
}
//PCU->PWRCR |= PCU_WREN_Mask; // Unlock Power Control Register
//PCU->PWRCR |= PCU_PWRDWN_Mask;// Set the Power Down flag
//+
//__asm {NOP};
///////////////
/*
PCU->PWRCR |= PCU_WREN_Mask; // Unlock Power Control Register
PCU->PWRCR |= PCU_PWRDWN_Mask;// Set the Power Down flag
__asm {NOP};
while(1);
*/
//LED speed up
//RCCU_PLL1Config(RCCU_Mul_12, RCCU_Div_4);
//while(RCCU_FlagStatus(RCCU_PLL1_LOCK) == RESET);// Wait PLL to lock
//RCCU_RCLKSourceConfig(RCCU_PLL1_Output);
//GPIO_Config(GPIO1, 0x1, GPIO_OUT_PP);
//GPIO_Config(GPIO0, 0x2, GPIO_OUT_PP);
//GPIO_Config(GPIO0, 0x8000, GPIO_INOUT_WP);
//while(1)
//{
//for(i=0; i<0xffff; i++);
//GPIO_WordWrite(GPIO1, GPIO_WordRead(GPIO1) ^ 0x1);
//for(i=0; i<0xffff; i++);
//GPIO_WordWrite(GPIO1, GPIO_WordRead(GPIO1) ^ 0x1);
//}
//PCU_LPMEnter(PCU_STANDBY);
/*
CLKS_Init();
HDLC_Init(); //set all HDLC regs to 0
IO_Init(); //GPIO set to HDLC AF
EIC_Config();
//IntMask = HDLC_TMCM;
//IntMask = HDLC_TMCM | HDLC_TBEM | HDLC_TDUM;
IntMask = HDLC_TMCM | HDLC_TBEM | HDLC_TDUM;
IntMask = IntMask | HDLC_RBFM | HDLC_RFOM | HDLC_RMCM | HDLC_RMEM;
HDLC_InterruptMaskBit(IntMask, ENABLE);
HDLC_XmitConfig(HDLC_CKSource, 48, 0, 0, HDLC_FM0, 0);
RFlag = HDLC_RCME;
HDLC_RecvConfig(HDLC_CK, 6, HDLC_R_FM0, RFlag, 0x00000061, 0x000000FF);
HDLC_Xmit_Control(DISABLE);
//HDLC_Xmit_Frame (XmitBuffer,6);
//UART_Printf("byteRecv= %d; byteSend = %d \n",byteRecv, byteSend); //print received buffer
//while(1)
//{
// if (HDLC_ReadPCRStatus(HDLC_TEN)==1)
// continue;
RecvAddr = RecvBuffer;
xmitRemain = 200;
xmitAddr = XmitBuffer;
HDLC_Xmit_Frame (&xmitAddr, &xmitRemain, 0, 1);
frameSend++;
//}*/
//while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -