|
下面为主函数
main.c
#include "mb96387rs.h"
#include "global.h"
#include "uart0.h"
#include "adc.h"
volatile char res;
void main(void)
{
ADC_init (); /* initialise ADC */
UART0init ;
InitIrqLevels();
__set_il(31); /* allow all levels */
__EI(); /* globally enable interrupts */
UART0putS("\nMB96387 Series A/DC demo\n");
UART0putS("\nAN0 is used\n");
res=0;
while(res !=0x4E && res !=0x6E)
{
while(ADCS_BUSY); /* check & wait if ADC is operating */
res=0;
UART0putS("\nStart new conversion ? (Y/N): ");
while (res != 0x59 && res != 0x79 && res != 0x4E && res != 0x6E) /* accept Y / N only */
res=UART0getch();
if (res == 0x59 || res == 0x79)
{
UART0putS ("\nNew conversion started\n ");
ADC_start (); /* start ADC0 */
}
}
UART0putS ("\nProgram stopped\n ");
for(;;);
}
ADC.c
#include "mb96387rs.h"
#include "uart0.h"
/*********************@GLOBAL_VARIABLES_START*******************/
/**********************@GLOBAL_VARIABLES_END********************/
/*********************@FUNCTION_HEADER_START*********************
*@FUNCTION NAME: ADC_init() *
* *
*@DESCRIPTION: Initialisation of ADC *
* *
*@PARAMETER: none *
* *
*@RETURN: none *
* *
***********************@FUNCTION_HEADER_END*********************/
void ADC_init (void)
{
ADCS = 0xA040;
/* Single conversion mode, channel 0, 10-bit res. activation by software, int enable */
}
/*********************@FUNCTION_HEADER_START*********************
*@FUNCTION NAME: ADC_start() *
* *
*@DESCRIPTION: ISR of ADC *
* *
*@PARAMETER: none *
* *
*@RETURN: none *
* *
***********************@FUNCTION_HEADER_END*********************/
void ADC_start (void)
{
ADCS = (ADCS & 0xFEFF) | 0x8200; /* start adc conversion */
}
/*********************@FUNCTION_HEADER_START*********************
*@FUNCTION NAME: ADC_isr() *
* *
*@DESCRIPTION: ISR of ADC *
* *
*@PARAMETER: none *
* *
*@RETURN: none *
* *
***********************@FUNCTION_HEADER_END*********************/
__interrupt void ADC_isr (void)
{
UART0putS("Value of ch.0: ");
UART0PutHex(ADCR, 3); /* send value via UART1 to Terminal */
UART0putch(13); /* CR */
UART0putch(10); /* LF */
ADCS &= 0xBEFF; /* clear int flag*/
}
UART0.c
#include "global.H"
#include "MB96387rs.H"
const char ASCII[] = "0123456789ABCDEF";
/*****************************************************************************
* DESCRIPTION: Initializes UART0 for asyncronous point-to-point
* communication mode, CPU CLKP=30MHz
*
* PARAMETERS: baudr(1200..115200),datab(7,8),par(0..2),stopb(1,2)
*
* RETURNS: None
*****************************************************************************/
void InitUart0(void)
{
#if USE_UART0
// switch port pins to input / output accordingly
PIER13_IE4= 1; // enable SIN0
DDR13_D5 = 1; // SOT0 = output
// 38400 Baud @ 48MHz
// BGR0=48000000/Baud
// 38400:1249
// 115200:417
PUCR13_PU4=1;
PUCR13_PU5=1;
BGR0 = 1457; //38400 baud@56Hz
//486; // 115200 Baud @ 56MHz
// 8N1
SCR0 = 0x17; //数据长8 发送使能 接收使能 清除接收错误
// disable UARTs interrupt, send LSB bit first
SSR0 = 0x00; //接收中断关闭
//clear serial mode register
SMR0 = 0x00;
//UART software reset
SMR0_UPCL=1;
//Restart reload counter
SMR0_REST=1;
// enable SOT0
SMR0_SOE=1;
#endif
}
/*****************************************************************************
* DESCRIPTION: waits for and returns incoming character (no timeout !)
*
* PARAMETERS: None
*
* RETURNS: Character or "-1" (Error)
*****************************************************************************/
int UART0getch (void)
{
while(!SSR0_RDRF && !SSR0_ORE); /* wait for data in buffer */
if (SSR0_ORE || SSR0_PE) { /* overrun or parity error */
SCR0=0x00; /* reset error flags */
return (-1);
} else
return (RDR0);/* return char */
}
/*****************************************************************************
* DESCRIPTION: sends a single character (no timeout !)
*
* PARAMETERS: Character
*
* RETURNS: None
*****************************************************************************/
void UART0putch (unsigned char ch)
{
while (!SSR0_TDRE); /* wait for empty buffer */
TDR0 = (unsigned char)ch; /* fill register */
}
/*****************************************************************************
* DESCRIPTION: sends a complete string (0-terminated)
*
* PARAMETERS: Pointer to (constant) file of bytes in mem
*
* RETURNS: None
*****************************************************************************/
void UART0putS(const char *buf)
{
while (*buf != '\0')
{
if(*buf == 10){ UART0putch(13); } /* correct CR LF seq */
UART0putch(*buf++); /* send every char of string */
}
}
/*****************************************************************************
* DESCRIPTION: sends a x-digit Hex-number (as ASCII charcaters)
* to terminal via ext. UART
*
* PARAMETERS: Value and number of Hex-digits (e.g. FF = 2 Hex digits)
*
* RETURNS: NONE
*****************************************************************************/
void UART0PutHex(unsigned long n, unsigned char digits)
{
unsigned char i,ch,div=0;
UART0putS("0x"); /* hex string */
div=(digits-1) << 2; /* init shift divisor */
for (i=0; i<digits; i++) {
ch = (n >> div) & 0xF; /* get hex-digit value */
UART0putch(ASCII[ch]); /* prompt to terminal as ASCII */
div-=4; /* next digit shift */
}
下面是用到的头文件
ADC.h
#ifndef _ADC_H
#define _ADC_H
void ADC_start (void);
void ADC_init (void);
#endif
GLOBAL.h
#ifndef _GLOBAL_H
#define _GLOBAL_H
#define LCD 0 /* use (1) or don't use (0) LCD on MB91360-Starterkit */
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned long DWORD;
#define ERROR -1
#define OK 0
#define TRUE 1
#define FALSE 0
#define ON TRUE
#define OFF FALSE
#define BIN2BYTE(a) ( ((0x##a##L>>21) & 0x80) + ((0x##a##L>>18) & 0x40) \
+ ((0x##a##L>>15) & 0x20) + ((0x##a##L>>12) & 0x10) \
+ ((0x##a##L>>9) & 0x08) + ((0x##a##L>>6) & 0x04) \
+ ((0x##a##L>>3) & 0x02) + (0x##a##L & 0x01))
#endif /* GLOBAL_H */
#ifndef _UART0_H
#define _UART0_H
void UART0init(unsigned long baudr, unsigned char datab, unsigned char par, unsigned char stopb);
int UART0getch (void);
void UART0putch (unsigned char ch);
void UART0putS(const char *buf);
void UART0PutHex(unsigned long n, unsigned char digits);
#endif |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|