📄 main.c
字号:
#include <hidef.h> /* common defines and macros */
#include <mc9s12e64.h> /* derivative information */
#include <string.h>
#define NOP {__asm NOP;}
#define RAM_START 0x0F00
#define ROM_START 0x7F00
#define SLAVE 0xAC /* slave address on I2C bus */
#define ALIGNED_WORD_MASK 0x0001
#pragma LINK_INFO DERIVATIVE "SampleS12"
const word vswr1 @0xC004;
const word vswr2 @0xC006;
const word gate @0xC008;
const word vswr_1 @0x3C8004;
const word vswr_2 @0x3C8006;
const word gate_1 @0x3C8008;
/* Global variables */
/*
byte TxPacket[256]; // global transmit packet
byte *IIC_TX_P; // pointer to current location in transmit packet
byte *IIC_TX_END; // (fixed) pointer to end of transmit packet
byte IIC_TX_FLAG; // global flag for transmit functionality
byte RxPacket[256]; // global receive packet
byte *IIC_RX_P; // pointer to current location in receive packet
byte *IIC_RX_END; // (fixed) pointer to end of receive packet
byte IIC_RX_FLAG = 0; // global flags for receive functionality
byte RxIndex=0;
*/
word count=0;
void SetBusClock(void);
void IoConfig(void);
extern void TxByte(byte TxData);
extern void CommInt(void);
extern void CommDeal(void);
extern void TX_Result(word answer);
void TimeInit(void);
void ADCInit(void);
word ADC_Conver(byte channel);
void IIC_Init(void);
extern void FlashWrite_ROM(byte *WriteData,word * address,byte page);
extern void FlashWrite_RAM(byte *WriteData,word * address,byte page);
extern void IIC_Deal(void);
void main(void) {
word i;
byte ff[512];
byte f=1;
/* put your own code here */
EnableInterrupts;
SetBusClock();
IoConfig();
CommInt();
ADCInit();
DDRE_BIT4=1; // 用来测量总线时钟
PEAR_NECLK=0;
PTU_PTU3=1;
IIC_Init();
for(i=0;i<=255;i++) ff[i]=(byte)i;
for(i=256;i<=511;i++) ff[i]=(byte)i-256;
if(f==2) {
FlashWrite_ROM(ff,(word *)0x8000,0x3d);
}
(void)memcpy((byte*)RAM_START,(byte*)ROM_START,255);
TimeInit();
// FlashWrite_RAM(ff,(word *)0x8000,0x3c);
for(;;) {
// TxByte('A') ;
for(i=0;i<0xFFFF;i++) NOP;
/*
TX_Result(k);
TxByte(' ');
TX_Result(j);
TxByte('\n');
*/
IIC_Deal();
CommDeal();
}
}
//PLL设置部分
void SetBusClock(void)
{
CLKSEL_PLLSEL =0;
REFDV= 0;
SYNR = 2; // 24MHZ
PLLCTL_AUTO =1; // 自动锁定
PLLCTL_PLLON =1; // 开启PLL
while(!CRGFLG_LOCK); // 等待频率稳定
CLKSEL_PLLSEL =1; // 设置为总线时钟
}
//IO设置部分
void IoConfig(void)
{
DDRU_DDRU0 =1; // 设置为输出模式
DDRU_DDRU1 =1; // 设置为输出模式
DDRU_DDRU2 =1; // 设置为输出模式
DDRU_DDRU3 =1; // 设置为输出模式
}
// 定时器初始化
void TimeInit(void) {
TIM0_TIOS_IOS4=1; // 把定时器0的通道4设置为比较模式
// TIM0_TIE_C4I =1; // 使能比较器中断
TIM0_TSCR2_PR =7; // 设置计数时间的预分频
TIM0_TC4=0xFF1; // 设置比较器的比较值
TIM0_TSCR1_TEN=1; // 使能定时器0
}
// 定时器1 中断服务程序 //
void interrupt timer0ch4(void) {
NOP;
TIM0_TFLG1_C4F=1;
count++;
//if(count>0xFFF0) {
PTU_PTU0 ^=1; //201
PTU_PTU1 ^=1; //202
PTU_PTU2 ^=1; //203
count=0;
// }
}
// AD转换模块初始化
void ADCInit() {
ATDCTL2_ADPU=1; //设置为普通的ADT功能
ATDCTL3_S8C =0; //每个序列转换一次
ATDCTL3_S4C =0;
ATDCTL3_S2C =0;
ATDCTL3_S1C =1;
ATDCTL4_SRES8=0; //10位结果
ATDCTL4_SMP =0; //采样周期为2个CLOCK
ATDCTL4_PRS =5; //24MHZ分频为2MHZ
ATDCTL5_DJM =1; //Right justified data in the result registers.
ATDCTL5_DSGN =0; //无符号结果
ATDCTL5_SCAN =0; //单次转换
ATDCTL5_MULT =0; //单次采样
}
word ADC_Conver(byte channel) {
asm PSHB
asm BSET 0x86,#128
asm LDAB 0x85
asm ANDB #240
asm ORAB 0,SP
asm STAB 0x85
asm BRCLR 0x86,#128,*+0
asm LDD 0x90
asm LEAS 1,SP
/*
ATDSTAT0_SCF=1; //将该位清零
ATDCTL5_Cx=channel; //设定转换的通道
while(!ATDSTAT0_SCF);//等待转换结束
return ATDDR0;
*/
}
// IIC的初始化
void IIC_Init(void) {
IBAD=SLAVE; //定义地址
IBFD=0x17; //24Mhz/240=100K的波特率
IBCR_IBEN =1;//IIC模块使能
IBCR_MS_SL=0;//从机模式
IBCR_IBIE =1;//中断使能
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -