📄 tutorial.c
字号:
/********************************************************************/
/* HOS-H8 (ITRON version3) */
/* tutorial5 */
/* 偙偺僾儘僌儔儉偼儌乕僪7偮傑傝ONE CHIP儌乕僪偱摦嶌偝偣傑偡丅 */
/* */
/* 擔棫敿摫懱僙儈僫乕採嫙偺僨僶僀僗掕媊僿僢僟乕僼傽僀儖偑昗弨偺 */
/* 僿僢僟乕僼傽僀儖傪曐懚偟偨僨傿儗僋僩儕偺壓丄H8僨傿儗僋僩儕偵 */
/* 曐懚偝傟偰偄傞偲慜採偝傟偰偄傑偡丅栜榑幚嵺偺娐嫬偵崌傢偣偰廋 */
/* 惓偑昁梫偱偡丅 */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/********************************************************************/
#include "..\..\..\..\..\include\h83048f.h"
#include "itron.h" /* HOS-H8梡僿僢僟僼傽僀儖 */
#include "defid.h" /* 僐儞僼傿僊儏儗乕僞乕偑惗惉偡傞ID掕媊僼傽僀儖 */
#include "tutorial.h"
#include "comm.h"
#include "itu.h"
/*僞僀儅娭悢*/
static void ITU0_Init( unsigned int TimeFactor );
/*僔儕傾儖娭悢*/
static void SCI1_Init( unsigned char rate );
static void SCI_Puts( const char *str );
/********************************************************************/
/* 僗僞乕僩傾僢僾乮旕僞僗僋晹乯 */
/* HOS偵偼main偼懚嵼偣偢傑偢偙偺張棟偑屇偽傟丄僔僗僥儉偺弶婜壔 */
/* TASK偺婲摦側偳傪峴偆丅 */
/********************************************************************/
void start_up( void )
{
/********************************************************************/
/* 億乕僩9偺弶婜壔 */
/* bit0:TXD0 */
/* bit1:TXD1 */
/* bit2:RXD0 */
/* bit3:RXD1 */
/********************************************************************/
P9.DDR = 0x03; /*0000 0011*/
/*廃曈僨僶僀僗偺弶婜壔:*/
ITU0_Init( TIM_1m ); /*僔僗僥儉僞僀儅乕偺廃婜傪1ms偵愝掕*/
/*SCI偺弶婜壔張棟*/
SCI1_Init( SCI_38400 ); /*儃乕儗乕僩偼38400bps偵愝掕*/
vset_tmi( 1 ); /*偙偺娭悢(幚偼儅僋儘)偱1ms娫妘偺帪娫峏怴傪巜掕偡傞*/
/* 僔僗僥儉僒乕價僗奐巒 */
sta_tsk( TID_POLLING, 0 ); /*僗僀僢僠偺娔帇傪偡傞TASK*/
sta_tsk( TID_SW1, 0 ); /*壗偑墴偝傟偨偐挷傋偰昞帵偡傞TASK*/
sta_tsk( TID_SW2, 1 ); /*壗偑墴偝傟偨偐挷傋偰昞帵偡傞TASK*/
sta_tsk( TID_SW3, 2 ); /*壗偑墴偝傟偨偐挷傋偰昞帵偡傞TASK*/
sta_tsk( TID_SW4, 3 ); /*壗偑墴偝傟偨偐挷傋偰昞帵偡傞TASK*/
sta_tsk( TID_SCI_SND1, 0 ); /*SCI1憲怣TASK*/
}
/********************************************************************/
/* polling TASK */
/* AKI-H8-LAN儃乕僪忋偺僾僢僔儏僗僀僢僠偑墴偝傟偨帠(棫偪壓偑傝僄僢 */
/* 僕)傪専弌偟偰偄傑偡丅 */
/********************************************************************/
void polling( INT stcd )
{
unsigned char sw[ 3 ];
#define SW_PORT PA.DR.BYTE
/*僗僀僢僠偼億乕僩A偺bit0乣bit3偵妱傝晅偗傜傟偰偄傞*/
while( 1 ) /*偙偺TASK偼堦搙婲摦偟偨傜帺暘偐傜廔椆偼偟側偄*/
{
dly_tsk( 100 ); /*帪娫懸偪張棟丄堷悢偼偙偺応崌100ms*/
sw[ 2 ] = sw[ 1 ]; /*偙偙偱100ms丄3夞偺僒儞僾儕儞僌偱僠儍僞儕儞僌*/
sw[ 1 ] = sw[ 0 ]; /*偺彍嫀傪峴偭偰偄傑偡丅*/
sw[ 0 ] = SW_PORT ^ 0xff;
/*曄壔偑専弌偝傟偨bit偑1偵側傝傑偡偺偱偦偺傑傑僀儀儞僩僼儔僌偺憲怣傪峴偄傑偡*/
set_flg( FID_SW, (sw[ 2 ] ^ 0xff) & sw[ 1 ] & sw[ 0 ] );
}
}
/********************************************************************/
/* Switch state TASK */
/********************************************************************/
void swN( INT stcd )
{
UB p_flgptn,my_sw;
const char swMsg[][8] =
{
"SW1\r\n",
"SW2\r\n",
"SW3\r\n",
"SW4\r\n",
};
my_sw = 1 << stcd; /*堷悢stcd偵懳墳偡傞僗僀僢僠傪寛傔偰偄傞*/
while( 1 ) /*偙偺TASK偼堦搙婲摦偟偨傜帺暘偐傜廔椆偼偟側偄*/
{
/*僀儀儞僩僼儔僌懸偪忬懺偵擖傞*/
wai_flg( &p_flgptn, FID_SW, my_sw, TWF_ORW );
clr_flg( FID_SW, !my_sw ); /*奩摉bit偺僋儕傾*/
wai_sem( SID_SCI1 ); /*SCI1偺儕儞僌僶僢僼傽偺妉摼懸偪*/
SCI_Puts( swMsg[ stcd ] );
sig_sem( SID_SCI1 ); /*SCI1偺儕儞僌僶僢僼傽偺奐曻*/
}
}
/********************************************************************/
/* 僞僀儅梡妱傝崬傒僴儞僪儔 */
/********************************************************************/
void TimerTrap( void )
{
int i;
ITU0.TSR.BYTE &= 0xfe; /*妱崬傒忦審偺僋儕傾*/
/* 俷俽偺僞僀儅僴儞僪儔傪僐乕儖 */
__timer_handler();
}
static SERIALBUFFER sr1,ss1; /*捠怣梡椞堟*/
/********************************************************************/
/* SCI弶婜壔張棟 */
/* 8bit丄嬼悢僷儕僥傿丄stop1偵愝掕偡傞丅堷悢偼儃乕儗乕僩 */
/********************************************************************/
static void SCI1_Init( unsigned char rate )
{
volatile int i;
char c;
/*憲庴怣僶僢僼傽偺億僀儞僞僋儕傾*/
sr1.wptr = sr1.rptr = ss1.wptr = ss1.rptr = 0;
/* SCI弶婜壔 */
SCI1.SCR.BYTE = 0x00; /*SCR傪0僋儕傾*/
SCI1.SMR.BYTE = 0x00; /*8bit丄僷儕僥傿柍偟丄STOP1*/
SCI1.BRR = rate; /*儃乕儗乕僩偼堷悢偱庢摼*/
for( i = 0; i < 250; i++ ){} /*帪娫懸偪*/
SCI1.SCR.BYTE = 0x70; /*庴怣妱傝崬傒傪巊梡偡傞*/
c = SCI1.SSR.BYTE; /*僟儈乕儕乕僪*/
SCI1.SSR.BYTE = 0x80; /*僄儔乕僼儔僌偺僋儕傾*/
}
/********************************************************************/
/* SCI憲怣TASK */
/********************************************************************/
void SCI_Snd1( INT stcd )
{
while( 1 )
{
/*婲彴懸偪*/
slp_tsk();
/*憲怣僶僢僼傽偵憲怣偡傋偒僨乕僞偑桳傞偐柍偄偐偺敾抐偼彂崬傒億僀儞僞偲撉崬傒億僀*/
/*儞僞傪斾妑偟偰摨偠抣偺帪偼憲怣偡傞僨乕僞柍偟偲敾抐偡傞丅*/
while( ss1.wptr != ss1.rptr ) /*擇偮偺億僀儞僞偺斾妑*/
{
while( !SCI1.SSR.BIT.TDRE ) dly_tsk( 2 ); /*TDREbit傪挷傋偰彂崬傒壜擻偵側傞傑偱懸偮*/
SCI1.TDR = ss1.buf[ ss1.rptr ]; /*僨乕僞憲怣*/
SCI1.SSR.BIT.TDRE = 0; /*TDREbit偺僋儕傾*/
ss1.rptr++; /*億僀儞僞傪恑傔傞*/
ss1.rptr &= ( SERIAL_BUFFER_SIZE - 1 ); /*億僀儞僞傪娵傔傞*/
}
}
}
/********************************************************************/
/* SCI暥帤楍憲怣張棟 */
/* str偼憲怣暥帤楍 */
/********************************************************************/
static void SCI_Puts( const char *str )
{
T_RTSK pk_rtsk;
int nxptr;
/*傑偢僶僢僼傽偵彂崬傓偑僶僢僼傽偑堦攖偵側偭偨傜懸偪傪擖傟傞*/
while( *str )
{
nxptr = ss1.wptr;
nxptr++;
if( nxptr >= SERIAL_BUFFER_SIZE ) nxptr = 0;
while ( ss1.rptr == nxptr ) /*僶僢僼傽偑堦攖側帪*/
{
wup_tsk( TID_SCI_SND1 ); /*憲怣TASK傪婲摦*/
dly_tsk( 10 ); /*懸偪*/
}
/* 憲怣僶僢僼傽偵1暥帤擖傟傞 */
ss1.buf[ ss1.wptr ] = *str++;
ss1.wptr = nxptr; /*彂偒崬傒億僀儞僞偺峏怴*/
}
/*憲怣TASK傪婲摦偡傞丅扐偟TASK偺婲摦忬懺傪妋擣偟偰婛偵婲摦偟偰偄傟偽峴傢側偄*/
ref_tsk( &pk_rtsk, TID_SCI_SND1 );
if( pk_rtsk.tskstat & (UINT)TTS_WAI ) wup_tsk( TID_SCI_SND1 );
}
/********************************************************************/
/* ITU0弶婜壔張棟 */
/* ITU0偼僔僗僥儉僞僀儅乕偲偟偰棙梡偡傞 */
/* 堷悢TimeFactor偼廃婜傪愝掕偡傞 */
/********************************************************************/
static void ITU0_Init( unsigned int TimeFactor )
{
ITU.TSTR.BIT.STR0 = 0; /*ITU0掆巭*/
ITU.TSNC.BIT.SYNC0 = 0; /*ch0偼撈棫摦嶌*/
ITU.TMDR.BIT.PWM0 = 0; /*ch0偼捠忢摦嶌*/
ITU0.TCR.BYTE = 0xa3; /*1010 0001:僐儞儁傾儅僢僠A偱TCNT傪僋儕傾*/
/*棫忋偑傝僄僢僕丄兂/8僋儘僢僋*/
ITU0.GRA = TimeFactor; /*僐儞儁傾儅僢僠A偺抣傪戙擖*/
ITU0.TIOR.BYTE = 0x88; /*1000 1000:僐儞儁傾儅僢僠弌椡嬛巭*/
ITU0.TSR.BYTE &= 0xf8; /*僗僥乕僞僗偺僋儕傾*/
ITU0.TIER.BYTE = 0xf9; /*僐儞儁傾儅僢僠A偱妱崬傒*/
ITU.TSTR.BIT.STR0 = 1; /*ITU0僗僞乕僩*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -