|
自己写的一个M3的语音芯片程序,语音芯片是syn6288,很多公交车上用的就是这个语音芯片。
#include "systemInit.h"
#include "uartGetPut.h"
#include "stdio.h"
#include "gpio.h"
#include "syn6288.h"
extern char text[];
// 定义KEY3(PB5)和KEY4(PA4)
#define KEY3_PERIPH SYSCTL_PERIPH_GPIOB
#define KEY3_PORT GPIO_PORTB_BASE
#define KEY3_PIN GPIO_PIN_5
#define KEY4_PERIPH SYSCTL_PERIPH_GPIOA
#define KEY4_PORT GPIO_PORTA_BASE
#define KEY4_PIN GPIO_PIN_4
//状态为为PA3
#define BUSY_PERIPH SYSCTL_PERIPH_GPIOA
#define BUSY_PORT GPIO_PORTA_BASE
#define BUSY_PIN GPIO_PIN_3
/*
//特殊功能的命令,已经又固定长度且进行了异或校验
//void SendSpecial(char *s,char longth)
// {
// char i;
// for(i=0;i<longyh;i++)
// uartPutc(s);
//} */
// KEY3中断初始化
void KEY3IntInit(void)
{
SysCtlPeriEnable(KEY3_PERIPH); // 使能KEY3所在的GPIO端口
GPIOPinTypeIn(KEY3_PORT, KEY3_PIN); // 设置KEY3所在管脚为输出
GPIOIntTypeSet(KEY3_PORT, KEY3_PIN, GPIO_LOW_LEVEL); // 设置KEY3的中断类型
IntPrioritySet(INT_GPIOB, 1 << 5); // 设置KEY3中断优先级为1
GPIOPinIntEnable(KEY3_PORT, KEY3_PIN); // 使能KEY3所在管脚的中断
IntEnable(INT_GPIOB); // 使能GPIOB端口中断
}
// KEY4中断初始化
void KEY4IntInit(void)
{
SysCtlPeriEnable(KEY4_PERIPH); // 使能KEY4所在的GPIO端口
GPIOPinTypeIn(KEY4_PORT, KEY4_PIN); // 设置KEY4所在管脚为输出
GPIOIntTypeSet(KEY4_PORT, KEY4_PIN, GPIO_LOW_LEVEL); // 设置KEY4的中断类型
IntPrioritySet(INT_GPIOA, 2 << 5); // 设置KEY4中断优先级为2
GPIOPinIntEnable(KEY4_PORT, KEY4_PIN); // 使能KEY4所在管脚的中断
IntEnable(INT_GPIOA); // 使能GPIOA端口中断
}
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
uartInit(); // UART初始化
SysCtlPeriEnable(BUSY_PERIPH); //初始PA3用于BUSy检测
GPIOPinTypeIn(BUSY_PORT, BUSY_PIN);
GPIOPinWrite(BUSY_PORT, BUSY_PIN,0x00);
KEY3IntInit(); // KEY3中断初始化
KEY4IntInit(); // KEY4中断初始化
IntMasterEnable(); // 使能处理器中断
for (;;)
{
//SendToSys6288(text,30);
//SysCtlDelay(5000*(TheSysClock/3000));
}
}
// GPIOB的中断服务函数
void GPIO_Port_B_ISR(void)
{
unsigned long ulStatus;
unsigned long ulStatus2=0x00;
ulStatus = GPIOPinIntStatus(KEY3_PORT, true); // 读取中断状态
GPIOPinIntClear(KEY3_PORT, ulStatus); // 清除中断状态,重要
// SendSpecial(busy,5);
ulStatus2=GPIOPinRead(BUSY_PORT, BUSY_PIN);
if ((ulStatus & KEY3_PIN)&&(ulStatus2==0x00)) // 如果KEY3的中断状态有效
{
SendToSyN6288(text,46); //
// for (;;); // 死循环,不退出中断服务函数
}
}
// GPIOG的中断服务函数
void GPIO_Port_A_ISR(void)
{
unsigned long ulStatus;
unsigned long ulStatus2;
ulStatus = GPIOPinIntStatus(KEY4_PORT, true); // 读取中断状态
GPIOPinIntClear(KEY4_PORT, ulStatus); // 清除中断状态,重要
ulStatus2=GPIOPinRead(BUSY_PORT, BUSY_PIN);
if ((ulStatus & KEY4_PIN)&&(ulStatus2==0x00)) // 如果KEY4的中断状态有效
{
SendToSyN6288(text+46,35); // 点亮LED4
// for (;;); // 死循环,不退出中断服务函数
}
}
syn6288的程序
#include "systemInit.h"
#include "uartGetPut.h"
#include "stdio.h"
#include "gpio.h"
#include "syn6288.h"
extern char text[];
// 定义KEY3(PB5)和KEY4(PA4)
#define KEY3_PERIPH SYSCTL_PERIPH_GPIOB
#define KEY3_PORT GPIO_PORTB_BASE
#define KEY3_PIN GPIO_PIN_5
#define KEY4_PERIPH SYSCTL_PERIPH_GPIOA
#define KEY4_PORT GPIO_PORTA_BASE
#define KEY4_PIN GPIO_PIN_4
//状态为为PA3
#define BUSY_PERIPH SYSCTL_PERIPH_GPIOA
#define BUSY_PORT GPIO_PORTA_BASE
#define BUSY_PIN GPIO_PIN_3
/*
//特殊功能的命令,已经又固定长度且进行了异或校验
//void SendSpecial(char *s,char longth)
// {
// char i;
// for(i=0;i<longyh;i++)
// uartPutc(s);
//} */
// KEY3中断初始化
void KEY3IntInit(void)
{
SysCtlPeriEnable(KEY3_PERIPH); // 使能KEY3所在的GPIO端口
GPIOPinTypeIn(KEY3_PORT, KEY3_PIN); // 设置KEY3所在管脚为输出
GPIOIntTypeSet(KEY3_PORT, KEY3_PIN, GPIO_LOW_LEVEL); // 设置KEY3的中断类型
IntPrioritySet(INT_GPIOB, 1 << 5); // 设置KEY3中断优先级为1
GPIOPinIntEnable(KEY3_PORT, KEY3_PIN); // 使能KEY3所在管脚的中断
IntEnable(INT_GPIOB); // 使能GPIOB端口中断
}
// KEY4中断初始化
void KEY4IntInit(void)
{
SysCtlPeriEnable(KEY4_PERIPH); // 使能KEY4所在的GPIO端口
GPIOPinTypeIn(KEY4_PORT, KEY4_PIN); // 设置KEY4所在管脚为输出
GPIOIntTypeSet(KEY4_PORT, KEY4_PIN, GPIO_LOW_LEVEL); // 设置KEY4的中断类型
IntPrioritySet(INT_GPIOA, 2 << 5); // 设置KEY4中断优先级为2
GPIOPinIntEnable(KEY4_PORT, KEY4_PIN); // 使能KEY4所在管脚的中断
IntEnable(INT_GPIOA); // 使能GPIOA端口中断
}
// 主函数(程序入口)
int main(void)
{
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:晶振,6MHz
uartInit(); // UART初始化
SysCtlPeriEnable(BUSY_PERIPH); //初始PA3用于BUSy检测
GPIOPinTypeIn(BUSY_PORT, BUSY_PIN);
GPIOPinWrite(BUSY_PORT, BUSY_PIN,0x00);
KEY3IntInit(); // KEY3中断初始化
KEY4IntInit(); // KEY4中断初始化
IntMasterEnable(); // 使能处理器中断
for (;;)
{
//SendToSys6288(text,30);
//SysCtlDelay(5000*(TheSysClock/3000));
}
}
// GPIOB的中断服务函数
void GPIO_Port_B_ISR(void)
{
unsigned long ulStatus;
unsigned long ulStatus2=0x00;
ulStatus = GPIOPinIntStatus(KEY3_PORT, true); // 读取中断状态
GPIOPinIntClear(KEY3_PORT, ulStatus); // 清除中断状态,重要
// SendSpecial(busy,5);
ulStatus2=GPIOPinRead(BUSY_PORT, BUSY_PIN);
if ((ulStatus & KEY3_PIN)&&(ulStatus2==0x00)) // 如果KEY3的中断状态有效
{
SendToSyN6288(text,46); //
// for (;;); // 死循环,不退出中断服务函数
}
}
// GPIOG的中断服务函数
void GPIO_Port_A_ISR(void)
{
unsigned long ulStatus;
unsigned long ulStatus2;
ulStatus = GPIOPinIntStatus(KEY4_PORT, true); // 读取中断状态
GPIOPinIntClear(KEY4_PORT, ulStatus); // 清除中断状态,重要
ulStatus2=GPIOPinRead(BUSY_PORT, BUSY_PIN);
if ((ulStatus & KEY4_PIN)&&(ulStatus2==0x00)) // 如果KEY4的中断状态有效
{
SendToSyN6288(text+46,35); // 点亮LED4
// for (;;); // 死循环,不退出中断服务函数
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……
|