📄 main.c
字号:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
********************************************************************************************************/
#include "config.h"
#define STADD 0x07
#define SRADD 0x07
#define MS (1<<30)
#define sRST (1<<29)
uint8 p=0x01;
uint8 receivedata1=0x00;
void delayNS(uint32 dly)
{
while(dly--) ;
}
/*------------------------------------------------------------------------------------------------------
**串口中断服务函数
--------------------------------------------------------------------------------------------------------*/
void __irq IRQ_RxD1(){
uint8 i,num;
if(0x04==(U1IIR&0x0f)){//加条件判断才能正确中断因为RBR中断包括两个中断源:一个是数据可用(RDA)010(IIR3:1);一个是字符超时指示(CTI),110(IIR3:1)
for(i=0;i<8;i++){
p=U1RBR;
// UART1_send_1Byte(p);
}
}
num=((IO0PIN&(SRADD<<19))>>19);
switch(num){
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
default:break;
}
// p=dat;
//delayNS(1000000);
VICVectAddr=0x00;
}
/*--------------------------------------------------------------------------------------------------------
**串口初始化函数
--------------------------------------------------------------------------------------------------------*/
void UART1_int(){
uint16 Fdiv;
U0LCR=0x87;//设置接受发送的数据格式//先要设置成11为格式
Fdiv=Fpclk/16/1200*6;//母串口波特率是字串口6倍,先要用1200bps进行初始化设置
U1DLM=Fdiv/256;
U1DLL=Fdiv%256;//Baud=Fpclk/(16*N) N=Fpclk/(Baud*N)
U1LCR=0x07;//11为数据格式
U1IER=0x05;//使能接受中断
U1FCR=0x01;//使能FIFO 8字节中断
VICIntSelect=0x00000000;
VICDefVectAddr=(int)IRQ_RxD1;
VICIntEnable=(1<<6);
}
/*------------------------------------------------------------------------------------------------------
**IO口初始化
--------------------------------------------------------------------------------------------------------*/
void IO_init(){
PINSEL0=0x00000005|(1<<16)|(1<<18);//P0.0 TxD 01; P0.1 RxD 01; P0.8 TxD1 01;P0.9 RxD1 01;
PINSEL1=0x00000000;
IO0DIR=0x01c03c00|MS|sRST;//P0继电器输出,MS,sRST
IO2DIR=(STADD<<16);//P2口 STADD0~2输出
IO1DIR=0x000000000;//P1输入
}
/*--------------------------------------------------------------------------------------------------------
**GM8125初始化
---------------------------------------------------------------------------------------------------------*/
void GM8125_init(){
uint8 cont_data,receivedata;
uint16 Fdiv;
//////////////////////////////////设置串口1为设置GM8125模式
U1LCR=0x87;//设置接受发送的数据格式//先要设置成11为格式
Fdiv=Fpclk/16/(1200*6);//母串口波特率是字串口6倍,先要用7200bps进行初始化设置
U1DLM=Fdiv/256;
U1DLL=Fdiv%256;//Baud=Fpclk/(16*N) N=Fpclk/(Baud*N)
U1LCR=0x07;//11为数据格式
U1FCR=0x01;//使能FIFO 1字节中断
//////////////////////////////////////对GM8125初始化
IO0CLR=sRST;
IO0SET=sRST;//对8125进行复位
delayNS(60000000);
cont_data=0xf2; //控制字
IO2CLR=(STADD<<16);//置 GM8125 命令字地址
delayNS(6000);
do{
IO0CLR=MS; //GM8125 工作在写命令字模式下
delayNS(1000);
U1THR=cont_data;
while((U1LSR&0x40)==0); //设置 GM8125 子串口波特率为 4800bps
delayNS(1000);
IO0SET=MS;//读命令字
while(U1LSR&0x01==0); //查询等待数据到来 ,是否要判断RDA?
receivedata=U1RBR;
receivedata1=receivedata;
}while(receivedata!=cont_data);
delayNS(6000);
IO0CLR=MS;//工作在多通道模式下
delayNS(6000);
IO2SET=((STADD&0x01)<<16);//地址不能为0
delayNS(600000);
///////////////////////////////下面设置串口正常工作模式
U0LCR=0x83;//设置接受发送的数据格式 10bit 无校验
Fdiv=Fpclk/16/(4800*6);//母串口波特率是字串口6倍,
U1DLM=Fdiv/256;
U1DLL=Fdiv%256;//Baud=Fpclk/(16*N) N=Fpclk/(Baud*N)
U1LCR=0x03;
U1IER=0x05;//使能接受中断
U1FCR=0x01;//使能FIFO 1字节中断
VICIntSelect=0x00000000;
VICDefVectAddr=(int)IRQ_RxD1;
VICIntEnable=(1<<7);
}
/*---------------------------------------------------------------------------------------------------------
**函数名:GM8125_send_1byte
**功能: 使用扩展串口发送一字节
**参数:data 要发送的数据 num 使用的串口号(取1----5)
**返回:void
----------------------------------------------------------------------------------------------------------*/
void GM8125_send_1Byte(uint8 data,uint8 num){
uint8 i;
IO2SET=((STADD&num)<<16);
delayNS(100000);
U1THR=data;
while((U1LSR&0x40)==0);
delayNS(1000);
/* IO2CLR=(STADD<<16);
for(i=0;i<5;i++){
U1THR=0x00;
while((U1LSR&0x40)==0);
}*/
}
/*-------------------------------------------------------------------------------------------------------
**函数名:send_nByte
**功能: 使用扩展串口发送n字节
**参数:buff 要发送的数数组;len:数据长度 num通道号(取1----5)
**返回:void
----------------------------------------------------------------------------------------------------------*/
void GM8125_send_nByte(uint8 buff[],uint8 len,uint8 num){
uint8 i,j;
for(i=0;i<len;i++){
IO2SET=(STADD&num)<<16;
delayNS(500);
U1THR=buff[i];//发送有效数据
while((U1LSR&0x40)==0);
IO2CLR=(STADD<<16);
for(j=0;j<5;j++){ //发送5个延时数据
U1THR=0x00;
while((U1LSR&0x40)==0);
}
}
}
int main (void)
{// add user source code
UART1_int();
IO_init();
GM8125_init();
while(1){
GM8125_send_1Byte(0x55,1);
delayNS(500000);
}
return 0;
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -