📄 adc.c
字号:
#include "C240.h"
unsigned int sign_state=0;
unsigned int current_value;
unsigned int current_dotbit;
/* define Input/Output variable value */
ioport unsigned int port0,port1,port2,port3,port4;
/* display data on LCD */
void display(display_value,dot_bit)
unsigned int display_value; /* the value want to be displayed */
int dot_bit; /* dot bit */
{
unsigned int bit_value[4];
int x;
port1=0;
if (display_value>=2000)
port1=port1|0x40;
bit_value[3]=display_value%10; /* the lowest bit data */
bit_value[2]=(display_value/10)%10;
bit_value[1]=(display_value/100)%10;
bit_value[0]=display_value/1000; /* the highest bit data */
if (bit_value[0]==1)
port1=port1|0x02;
if (sign_state)
port1=port1|0x01;
x=dot_bit;
if (x!=4)
port1=port1|(1<<(x+1)); /* show radix point */
port4=bit_value[3];
port3=bit_value[2];
port2=bit_value[1];
if ((dot_bit==3)&&(bit_value[1]==0)&&(bit_value[0]==0))
port2=0x0f;
}
/*********************************************/
void ADC_ISR()
{
ADCTRL1=0xcb04;
ADCTRL2=0x0404;
/*unsigned int x1,x2;
long x3;
ADCTRL1=0x2304;
ADCTRL2=0x0004;
ADCTRL1=0x3304;
x1=ADCFIFO1;
x2=x1>>6;
x3=(x2*500)>>10;
current_value=(unsigned int)x3;
current_dotbit=2;
display(666,2); */
}
/*********************************************/
void dsp_setup()
{
unsigned int temp;
/*********************************************/
/* Disable watchdog timer */
/*********************************************/
temp = WDCR;
temp = temp|0x68;
WDCR = temp;
/*********************************************/
/* initialize PLL module (20 MHz XTAL1) */
/*********************************************/
CKCR1 = 0x61; /* crystal=20MHz CPUCLK = 40MHz */
/* and 2x PLL mult ratio */
CKCR0 = 0xc3; /* low–power mode 0, */
/* ACLK enabled, */
/* PLL enabled, */
/* SYSCLK=CPUCLK/2 */
SYSCR = 0x40c0;
}
/* Initiate the event management register */
void eventmgr_init()
{
GPTCON=0x0442;
/* Initialize T1 */
T1PER=0x07d0; /* Period is 200us */
T1CMP=0x03e8;
T1CON=0x9042;
T2PER=0x00c8; /* Period is 20us */
T2CON=0x9040;
/* Setup shared pins */
OCRA = 0xf800; /* pins IOPB0–IOPB3 & IOPA0–IOPA2 to I/O pins */
OCRB = 0x00f1; /* pins are: ADSOC, XF, /BIO, CAP1–CAP4 */
PADATDIR = 0x0700; /* outputs IOPA0–IOPA2, set low */
PBDATDIR = 0x0707; /* outputs IOPB0–IOPB2, set high */
}
/* initiating parameter and register */
void init_SRM()
{
ADCTRL1=0xcb04;
ADCTRL2=0x0404;
}
/*******************************************************************/
void disable_interrupts()
{
asm(" SETC INTM");
}
/************************************************************************/
void enable_interrupts()
{
IFR = 0xffff; /* Clear pending interrupts */
IFRA = 0xffff;
IFRB = 0xffff;
IFRC = 0xffff;
IMR = 0x0024; /* Enable CPU Interrupts:INT 1,2,3,4,6 */
IMRA = 0x0080; /* Enable timer 1 period and PDPINT interrupts */
IMRB = 0x0001; /* Enable timer 3 period interrupts */
IMRC = 0x0000; /* Enable CAP1–CAP3 interrupts*/
asm(" CLRC INTM"); /* Global interrupt enable */
}
void c_int2()
{
IFR=0x0002; /* clear CPU interrupt flag */
IFRA=0xff; /* clear interrupt flag */
/* display(222,2); */
}
/* ISR for GPT2 interrupt */
void c_int3()
{
IFR=0x0004; /* clear CPU interrupt flag */
IFRB=0xff;
display(333,2);
}
/* ADC int */
void c_int6()
{
unsigned int sysint_vector;
IFR=0x0020; /* Clear interrupt flags */
sysint_vector=SYSIVR; /* read interrupt vector address offset */
if (sysint_vector=0x0004) /* if ADC interrupt */
ADC_ISR();
}
/* ***************************************************************** */
/* The main program
/* ***************************************************************** */
main()
{
unsigned int x1,x2;
long x3;
unsigned int velocity;
disable_interrupts();
dsp_setup();
init_SRM();
eventmgr_init();
enable_interrupts();
for(;;)
{
x1=ADCTRL1;
/* if ((x1 & 0x80)==0)
{ x1=ADCFIFO1;
x2=x1>>6;
x3=(((long)x2)*500)>>10;
current_value=(unsigned int)x3;
current_dotbit=2;
display(current_value,current_dotbit);
}
*/
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -