124 lines
3.1 KiB
C
124 lines
3.1 KiB
C
#include "sound4calc.h"
|
|
#include <mpu.h> // from Gint
|
|
#include <timer.h> //from Gint
|
|
|
|
char* signal = "-_"; // simple waveform
|
|
short Seq_signal[6] = {440,500,392,500,349,500}; // sequence signal
|
|
|
|
|
|
void PlaySequence()
|
|
{
|
|
static int length_end = 0;
|
|
static int note = 0;
|
|
|
|
if(length_end<=0)
|
|
{
|
|
note+=2;
|
|
|
|
if(!Seq_signal[note])
|
|
{
|
|
timer_stop(TIMER_USER);
|
|
return;
|
|
}
|
|
|
|
length_end = Seq_signal[note+1];
|
|
|
|
timer_start(TIMER_USER, Seq_signal[note], Clock_Hz, PlaySequence, Seq_signal[note+1]);
|
|
}
|
|
|
|
PlayNote();
|
|
length_end--;
|
|
}
|
|
|
|
/*
|
|
PlayNote()
|
|
allow to make different waveforms with '-' and '_'
|
|
*/
|
|
void PlayNote()
|
|
{
|
|
static int x = 0;
|
|
PutPinState(signal[x]=='-');
|
|
x = x + 1;
|
|
if(!(signal[x])) x = 0;
|
|
}
|
|
|
|
/*
|
|
PutPinState()
|
|
put the pin at the level wanted
|
|
|
|
SH4 :
|
|
state 0 : xxxx.01xx
|
|
state 1 : xxxx.10xx
|
|
SH3 :
|
|
state 0 : xxxx.xxx0
|
|
state 1 : xxxx.xxx1
|
|
*/
|
|
void PutPinState(char level)
|
|
{
|
|
level = !!level;
|
|
|
|
if(isSH3())
|
|
{
|
|
*(volatile unsigned char*)SH7337_SCPDR = (*(volatile unsigned char*)SH7337_SCPDR & 0xFE) | level ;
|
|
}
|
|
else
|
|
{
|
|
*(volatile unsigned char*)SH7305_PJDR = (*(volatile unsigned char*)SH7305_PJDR & 0xF3) | (0x1<<(2+level));
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
InitPorts();
|
|
Ports initialisation
|
|
Open all need ports to use SwitchPinState()
|
|
*/
|
|
void InitPorts()
|
|
{
|
|
if(isSH3())
|
|
{
|
|
// initialisation of pin
|
|
// *(volatile unsigned char*)SH7337_SCPDR |= 0x01;
|
|
|
|
// SCIF2 clock on (STBCR3.MSTP31)
|
|
*(volatile unsigned char*)SH7337_STBCR3 &= ~0x02;
|
|
// switch off SCSMR_2.TE and SCSMR_2.RE
|
|
*(volatile unsigned short*)SH7337_SCSCR2 &= ~0x0030;
|
|
// SCIF2 clock off (STBCR3.MSTP31)
|
|
*(volatile unsigned char*)SH7337_STBCR3 |= 0x02;
|
|
// set bit 6 of port G to output mode
|
|
*(volatile unsigned short*)SH7337_PGCR = ( *(volatile unsigned short*)SH7337_PGCR & ~0x3000 ) | 0x1000;
|
|
// set bit 5 and 6 of port G
|
|
*(volatile unsigned char*)SH7337_PGDR |= 0x60;
|
|
// set port SC bit 0 to output
|
|
*(volatile unsigned short*)SH7337_SCPCR = ( *(volatile unsigned short*)SH7337_SCPCR & ~0x0003 ) | 0x0001;
|
|
}
|
|
else
|
|
{
|
|
// initialisation of pin
|
|
// *(volatile unsigned char*)SH7305_PJDR |= 0x04;
|
|
|
|
// SCIF2 clock on (MSTPCR0.MSTP007)
|
|
*(volatile unsigned int*)SH7305_MSTPCR0 &= ~0x00000080;
|
|
// switch off SCSMR_2.TE and SCSMR_2.RE
|
|
*(volatile unsigned short*)SH7305_SCSCR &= ~0x0030;
|
|
// SCIF2 clock off (MSTPCR0.MSTP007)
|
|
*(volatile unsigned int*)SH7305_MSTPCR0 |= 0x00000080;
|
|
// set bit 3 of port U to output mode
|
|
*(volatile unsigned short*)SH7305_PUCR = ( *(volatile unsigned short*)SH7305_PUCR & ~0x00C0 ) | 0x0040;
|
|
// set bit 4 and 5 of port U
|
|
*(volatile unsigned char*)SH7305_PUDR |= 0x0C;
|
|
// set port J bit 2 to output
|
|
*(unsigned short*)0xA4050110 = ( *(unsigned short*)0xA4050110 & ~0x0030 ) | 0x0010;
|
|
// set port J bit 3 to input
|
|
*(unsigned short*)0xA4050110 = ( *(unsigned short*)0xA4050110 & ~0x00C0 ) | 0x0080;
|
|
|
|
/*
|
|
// set port J bit 2 to output mode
|
|
*(volatile unsigned short*)SH7305_PJCR = ( *(volatile unsigned short*)SH7305_PJCR & ~0x0030 ) | 0x0010;
|
|
// set port J bit 3 to output mode
|
|
*(volatile unsigned short*)SH7305_PJCR = ( *(volatile unsigned short*)SH7305_PJCR & ~0x00C0 ) | 0x0040;
|
|
*/
|
|
}
|
|
}
|