📄 miniisa.c
字号:
/****************************************Copyright (c)*****************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name:
** Last modified Date:
** Last Version: 1.0
** Descriptions: MiniISA基本操作函数
**
**------------------------------------------------------------------------------------------------------
** Created by:
** Created date:
** Version:
** Descriptions:
**
**------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
** Version:
** Descriptions:
**
**********************************************************************************************************/
#include "config.h"
/**********************************************************************************************************
** Function name: void MISARst(uint32 time)
** Descriptions: 复位MiniISA总线
** Input: 复位时间(根据系统TICK设定)
** Output: 无
**********************************************************************************************************/
void MISARst(uint32 time)
{
uint8 tmp;
tmp = MISA_SYS_CFG;
tmp &= 0xFE;
MISA_SYS_CFG = tmp; /* RESET脚输出低电平 */
OSTimeDly(time);
MISA_SYS_CFG = tmp | 0x01; /* RESET脚输出高电平 */
}
/**********************************************************************************************************
** Function name: void MISAInit(void)
** Descriptions: 初始化MiniISA总线
** Input:
** Output: 无
**********************************************************************************************************/
void MISAInit(void)
{
uint8 tmp;
tmp = MISA_IRQStat; /* 清中断标志 */
MISA_IntEn = 0x0F; /* 使能所有IRQ通道 */
MISARst (100);
MISA_SYS_CFG |= 0x02; /* MiniISA中断总使能 */
}
/**********************************************************************************************************
** Function name: void EMCInit(void)
** Descriptions: 初始化外部总线
** Input:
** Output: 无
**********************************************************************************************************/
void EMCInit(void)
{
PCONP |= 0x00000800; /* 打开EMC控制器 */
PINSEL9 |= 0x01<<28; /* CS0 */
PINSEL6 = 0x55555555; /* D0--D15 */
PINSEL8 = 0x55555555; /* A0--A15 */
PINSEL9 = 0x55555555; /* A19--A23,nOE,nWE */
/* 使能EMC、禁止映象 */
/* 字节状态位PB为1,nOE读、nWR写*/
EMCStaticConfig0 = 0x00000080; /* 16位数据总线,使用延时 */
EMCStaticWaitWen0 = 0x0; /* 写使能延时为 */
EMCStaticWaitOen0 = 0x0; /* 从器件输出使能延时为 */
EMCStaticWaitRd0 = 0x1f; /* 延时 后再读 */
EMCStaticWaitPage0 = 0x0; /* 页读写转换时间为 */
EMCStaticWaitWr0 = 0x1f; /* 写失效时间为 */
EMCStaticWaitTurn0 = 0x0;
EMCControl = 0x00000001;
}
/**********************************************************************************************************
** Function name: void WriteBus(const uint8 *str, uint8 base, uint8 len)
** Descriptions: 写总线
** Input: str 写入数据指针
** base 起始地址
** len 长度
** Output: 无
**********************************************************************************************************/
void WriteBus(const uint8 *str, uint8 base, uint8 len)
{
uint8 i;
for (i=0; i<len; i++) {
*(volatile unsigned char *)(MISA_BASE_ADDR + base + i) = str[i];
}
}
/**********************************************************************************************************
** Function name: void ReadBus(uint8 *info, uint8 base, uint8 len)
** Descriptions: 读总线
** Input: info 读取数据缓存首地址
** base 起始地址
** len 字节数
** Output: 无
**********************************************************************************************************/
void ReadBus(uint8 *info, uint8 base, uint8 len)
{
uint8 i;
for (i=0; i<len; i++) {
info[i] = *(volatile unsigned char *)(MISA_BASE_ADDR + base + i);
}
}
/**********************************************************************************************************
** Function name: void InitExInt(void)
** Descriptions: 初始化外部中断0 (EINT0)
** Input:
** Output: 无
**********************************************************************************************************/
//void Eint0_Exception(void);
void InitExInt(void)
{
PINSEL4 = PINSEL4 & (~(0x03 << 20)) | (0x01 << 20); /* P2.10连接EINT0 */
EXTINT |= 0xf; /* 清外部中断0中断标志 */
EXTMODE |= 0x01;
EXTPOLAR = 0x00;
SetVICIRQ(14, 4, (uint32)Eint0_Exception); /* 初始化VIC */
}
/**********************************************************************************************************
** Function name: void Eint0_Exception(void)
** Descriptions: MiniISA中断函数
** Input:
** Output: 无
**********************************************************************************************************/
void Eint0_Exception(void)
{
uint8 tmp;
tmp = MISA_IRQStat & 0xf;
if (tmp & 0x01) {
OSSemPost(MiniSem); /* 8016A使用IRQ0 */
}
if (tmp & 0x02) {
/* 针对不同中断号的处理 */
}
if (tmp & 0x04) {
}
if (tmp & 0x08) {
}
EXTINT = 1<<0; /* 清外部中断0中断标志 */
VICVectAddr = 0x00; /* 通知VIC中断处理结束 */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -