тестовые коды для PIC18F67K22 выглядят так... может кому пригодятся
main.c
Код: Выделить всё
#use delay(clock=64M, crystal=16M)
#use SPI(SPI1,FORCE_HW,MODE=0)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <font.h>
#include <lcd.h>
#include <hardware.h>
#include <YM2149.h>
#include <YM2612.h>
#include <SAM2695.h>
BYTE main()
{
glcd_init(ON);
glcd_text57(20,32,"Initializing...",1,1);
YM_FM_init();
if (SAM_Init()==0) return 0;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
while(TRUE)
{
}
}
hardware.h
Код: Выделить всё
#define A0 PIN_A2
#define A1 PIN_A3
#define RD PIN_A0
#define WR PIN_A1
#define YM_IC PIN_G3
#define SD_CS PIN_C2 /* Select for MicroSD */
#define HC_CS PIN_F7 /* Select for HC595 */
#define YM_CS1 PIN_G4 /* Select for YM2612#1 */
#define YM_CS2 PIN_A5 /* Select for YM2612#2 */
#define SM_CS PIN_F1 /* Select for SAM2695 */
SAM2695.h
Код: Выделить всё
#define PAR_MODE 0x3F
#define UART_MODE 0xFF
#define PAR_OK 0xFE
/* Prototypes */
BYTE SAM_Init();
BYTE read_SAM_Data();
BYTE read_SAM_Status();
BYTE check_RF();
BYTE check_TE();
void write_SAM_Data(BYTE Data);
void write_SAM_Control(BYTE Data);
/*Interrupt INT0*/
#INT_EXT
void int0_isr()
{
BYTE data;
data = read_SAM_Data();
write_SAM_Data(data);
}
/* Functions*/
BYTE SAM_Init()
{
BYTE res;
write_SAM_Control(PAR_MODE);
res = read_SAM_Data();
if (res==PAR_OK) return 1;
else return 0;
}
BYTE check_RF()
{
BYTE data;
data = read_SAM_Status();
return bit_test(data,6);
}
BYTE check_TE()
{
BYTE data;
data = read_SAM_Status();
return bit_test(data,7);
}
void write_SAM_Control(BYTE Data)
{
output_high(A0);
output_low(SM_CS);
output_low(WR);
output_e(Data);
delay_us(1);
output_high(WR);
output_high(SM_CS);
}
BYTE read_SAM_Data()
{
BYTE data;
output_low(A0);
output_low(SM_CS);
output_low(RD);
data = input_e();
output_high(RD);
output_high(SM_CS);
return data;
}
void write_SAM_Data(BYTE Data)
{
output_low(A0);
output_low(SM_CS);
output_low(WR);
output_e(Data);
delay_us(1);
output_high(WR);
output_high(SM_CS);
output_high(WR);
}
BYTE read_SAM_Status()
{
BYTE data;
output_high(A0);
output_low(SM_CS);
output_low(RD);
data = input_e();
output_high(RD);
output_high(SM_CS);
return data;
}
Для компилятора CCS PICC
Бонус - воспроизведение миди в параллельном режиме https://ru.files.fm/u/zjrvgxmr
Удачных экспериментов!