找回密码
 立即注册
楼主: 神农鼎

还是从 printf_usb("Hello World !\r\n") 开始,《单片机原理及应用》入门@Ai8051U

[复制链接]
  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-15 23:29:56 | 显示全部楼层
2025/4/15:
利用 AiCube@AIapp-ISP V6.95M
智能配置开发工具,实现如下的实验:
AiCube 实验二:  查询方式,查询到电脑命令后,
                           printf_usb("Hello World !\r\n")或其他

32位8051单片机入门第一个完整的C语言程序
截图202504160806002606.jpg

截图202504160806398372.jpg
2025/4/15:
利用 AiCube@AIapp-ISP V6.95M
智能配置开发工具,实现如下的实验:
AiCube 实验二:  查询方式,查询到电脑命令后,
                           printf_usb("Hello World !\r\n")或其他
32位8051单片机入门第一个完整的C语言程序
截图202504152334288149.jpg

截图202504152334573376.jpg
深圳国芯人工智能有限公司-工具软件
keil C51/C251 编译器只支持31以内中断号,超过31编译报错。
热心网友提供的简单KEIL中断号拓展工具,可将中断号拓展到254,
在KEIL 未打开的状况下,运行【Keil 中断拓展插件】,将中断号拓展到254。
截图202504152335232945.jpg
使用 AIapp-ISP V6.95M 或以上版本,在KEIL 未打开的状况下
重新添加一次新的头文件
截图202504152335409446.jpg
添加的 新头文件 在这


使用 AIapp-ISP V6.95M 或以上版本中的
AiCube 智能配置工具自动生成强大的初始化程序
截图202504152357067259.jpg

截图202504152343117317.jpg
对应的在 KEIL C251 中的 项目设置,已是最优,不需要修改

截图202504152344489933.jpg
可视图形化I/O口配置工具】本实验暂时不需要配置

截图202504152345513273.jpg
选择用 出厂预置的 40MHz 高速IRC 时钟 跑用户程序
===如在这选择用户程序区用户程序自己去修改频率
===那ISP烧录时的频率会被改为上面的频率

截图202504152347038812.jpg
选择使用【USB外设】;
选择本实验程序 使用【USB-CDC 通信协议】;
也可以选择本实验程序 使用【USB-HID 通信协议】;
其他设置本实验程序暂时用不到,直接点击【创建项目

截图202504152353067986.jpg

项目创建成功后,Keil 自动打开该【项目文件
截图202504152359447762.jpg

截图202504160007401100.jpg
将下面这段程序
USB_SendData(UsbOutBuffer, OutNumber); //用户修改本行程序去达到自己的目的
改成:
if(UsbOutBuffer[0]==6)
        printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
else if(UsbOutBuffer[0]==7)
        printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
截图202504160015139318.jpg
编译产生的 *.HEX文件在下面目录中
截图202504160019308471.jpg
用 ISP软件 打开该目标文件,
AI8051U实验设备, P3.2按键按下,P3.2为低,
重新上电,点击【下载/编程】按钮, 烧录成功。
单片机/MCU, AI8051U,
自动运行 printf_usb("Hello World !\r\n")程序。
截图202504160021406803.jpg

截图202504160023541766.jpg
如上,点击【打开串口

截图202504160026222721.jpg
程序运行效果如上

具体程序如下
  1. ////////////////////////////////////////
  2. // 文件名称: main.c
  3. // 文件描述:
  4. // 文件版本: V1.0
  5. // 修改记录:
  6. //   1. (2025-04-15) 创建文件
  7. ////////////////////////////////////////
  8. #include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件
  9. ////////////////////////////////////////
  10. // 项目主函数
  11. // 入口参数: 无
  12. // 函数返回: 无
  13. ////////////////////////////////////////
  14. void main(void)
  15. {
  16.     SYS_Init();
  17.     while (1)
  18.     {
  19.         USBLIB_OUT_Done();              //查询方式处理USB接收的数据
  20.     }
  21. }
  22. ////////////////////////////////////////
  23. // 系统初始化函数
  24. // 入口参数: 无
  25. // 函数返回: 无
  26. ////////////////////////////////////////
  27. void SYS_Init(void)
  28. {
  29.     EnableAccessXFR();                  //使能访问扩展XFR
  30.     AccessCodeFastest();                //设置最快速度访问程序代码
  31.     AccessIXramFastest();               //设置最快速度访问内部XDATA
  32.     IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基
  33.     P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
  34.     P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
  35.     P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
  36.     P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
  37.     P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
  38.     P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
  39.     P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
  40.     P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式
  41.     CLK_Init();                         //时钟模块初始化
  42.     USBLIB_Init();                      //USB库初始化
  43.     EnableGlobalInt();                  //使能全局中断
  44. }
  45. ////////////////////////////////////////
  46. // 毫秒延时函数
  47. // 入口参数: ms (设置延时的毫秒值)
  48. // 函数返回: 无
  49. ////////////////////////////////////////
  50. void delay_ms(uint16_t ms)
  51. {
  52.     uint16_t i;
  53.     do
  54.     {
  55.         i = MAIN_Fosc / 6000;
  56.         while (--i);
  57.     } while (--ms);
  58. }
  59. ////////////////////////////////////////
  60. // 时钟初始化函数
  61. // 入口参数: 无
  62. // 函数返回: 无
  63. ////////////////////////////////////////
  64. void CLK_Init(void)
  65. {
  66.     CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频
  67.     HIRC_40M();                         //选择内部预置的频率
  68.     CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
  69.     CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择
  70.     CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数
  71.     CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
  72.     CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数
  73.     CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
  74.     CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
  75.     CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
  76.     CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
  77.     CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
  78. }
  79. ////////////////////////////////////////
  80. // USB库初始化函数
  81. // 入口参数: 无
  82. // 函数返回: 无
  83. ////////////////////////////////////////
  84. void USBLIB_Init(void)
  85. {
  86.     usb_init();                         //初始化USB模块
  87.     USB_SetIntPriority(0);              //设置中断为最低优先级
  88.     set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
  89. }
  90. ////////////////////////////////////////
  91. // 等待USB配置完成函数
  92. // 入口参数: 无
  93. // 函数返回: 无
  94. ////////////////////////////////////////
  95. void USBLIB_WaitConfiged(void)
  96. {
  97.     while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
  98. }
  99. ////////////////////////////////////////
  100. // USB设备接收数据处理程序
  101. // 入口参数: 无
  102. // 函数返回: 无
  103. // bUsbOutReady:USB设备接收数据标志位
  104. // OutNumber:USB设备接收到的数据长度
  105. // UsbOutBuffer:保存USB设备接收到的数据
  106. ////////////////////////////////////////
  107. void USBLIB_OUT_Done(void)
  108. {
  109.     if (bUsbOutReady) //查询模式固定格式,查询是否有接收到USB主机发送数据
  110.     {
  111.         //USB_SendData(UsbOutBuffer, OutNumber); //用户修改本行程序去达到自己的目的
  112.                           //上句是,将接收到的数据,原路返回, 送回主机,用于测试,可任意修改
  113.                           if(UsbOutBuffer[0]==6)
  114.                                                 printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是 6,打印“HelloWorld!"
  115.                                 else if(UsbOutBuffer[0]==7)
  116.                                                 printf_usb("China!\r\n");        //如接收到的数据包的第0个字节是7,打印“China!"
  117.                                 
  118.         usb_OUT_done();  //查询模式固定格式,当前包的数据已处理完成,通知USB主机可以发送下一包数据
  119.     }
  120. }
复制代码

截图202504160046023915.jpg

截图202504160046336643.jpg

printf_usb_query.zip

138.75 KB, 下载次数: 8

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-16 00:35:28 | 显示全部楼层

2025/4/16:
利用 AiCube@AIapp-ISP V6.95M
智能配置开发工具,实现如下的实验:
AiCube 实验三:  中断方式单片机USB中断接收服务函数收到命令后,
                           printf_usb("Hello World !\r\n")或其他
32位8051单片机入门第一个完整的C语言程序
截图202504160812298115.jpg

截图202504160813082326.jpg

截图202504160813461531.jpg

2025/4/16:
利用 AiCube@AIapp-ISP V6.95M
智能配置开发工具,实现如下的实验:
AiCube 实验三:  中断方式单片机USB中断接收服务函数收到命令后,
                           printf_usb("Hello World !\r\n")或其他
32位8051单片机入门第一个完整的C语言程序

截图202504160815438172.jpg

截图202504160816039828.jpg
keil C51/C251 编译器只支持31以内中断号,超过31编译报错。
热心网友提供的简单KEIL中断号拓展工具,可将中断号拓展到254,
在KEIL 未打开的状况下,运行【Keil 中断拓展插件】,将中断号拓展到254。


截图202504160816267894.jpg
使用 AIapp-ISP V6.95M 或以上版本,在KEIL 未打开的状况下
重新添加一次新的头文件

截图202504160816438377.jpg
添加的 新头文件 在这


使用 AIapp-ISP V6.95M 或以上版本中的
AiCube 智能配置工具自动生成强大的初始化程序
截图202504160822119289.jpg

截图202504160824492922.jpg
对应的在 KEIL C251 中的 项目设置,已是最优,不需要修改
截图202504160828543135.jpg
可视图形化I/O口配置工具】本实验暂时不需要配置
截图202504160831513003.jpg
选择用 出厂预置的 40MHz 高速IRC 时钟 跑用户程序
===如在这选择用户程序区用户程序自己去修改频率
===那ISP烧录时的频率会被改为上面的频率
截图202504160832537932.jpg

截图202504160833409183.jpg

截图202504160834175872.jpg

截图202504160835514416.jpg
项目创建成功后,Keil 自动打开该【项目文件
截图202504160837446026.jpg

截图202504160843035087.jpg
将下面这段程序
    USB_SendData(UsbOutBuffer, OutNumber); //将接收的数据,直接送回主机,用于演示测试
改成:
if(UsbOutBuffer[0]==6)
        printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是6,打印“HelloWorld!"
else if(UsbOutBuffer[0]==7)
        printf_usb("China!\r\n");  //如接收到的数据包的第0个字节是7,打印“China!"
截图202504160848521447.jpg
编译产生的 *.HEX文件在下面目录中
截图202504160849521666.jpg
用 ISP软件 打开该目标文件,
AI8051U实验设备, P3.2按键按下,P3.2为低,
重新上电,点击【下载/编程】按钮, 烧录成功。
单片机/MCU, AI8051U,
自动运行USB中断程序,跟据接收到的命令,
执行:printf_usb("Hello World !\r\n")程序。
或执行:printf_usb("China !\r\n")程序。
截图202504160852344124.jpg

截图202504160853127689.jpg

截图202504160854345985.jpg
如上,点击【打开串口

截图202504160855233426.jpg
程序运行效果如上

具体程序如下
////////////////////////////////////////
// 文件名称: main.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
//   1. (2025-04-16) 创建文件
////////////////////////////////////////

#include "config.h"                     //默认已包含stdio.h、intrins.h、ai_usb.h等头文件

////////////////////////////////////////
// 项目主函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void main(void)
{
    SYS_Init();

    while (1)
    {
    }
}

////////////////////////////////////////
// 系统初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void SYS_Init(void)
{
    EnableAccessXFR();                  //使能访问扩展XFR
    AccessCodeFastest();                //设置最快速度访问程序代码
    AccessIXramFastest();               //设置最快速度访问内部XDATA
    IAP_SetTimeBase();                  //设置IAP等待参数,产生1us时基

    P0M0 = 0x00; P0M1 = 0x00;           //初始化P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;           //初始化P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;           //初始化P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;           //初始化P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;           //初始化P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;           //初始化P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;           //初始化P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;           //初始化P7口为准双向口模式

    CLK_Init();                         //时钟模块初始化
    USBLIB_Init();                      //USB库初始化

    EnableGlobalInt();                  //使能全局中断
}

////////////////////////////////////////
// 毫秒延时函数
// 入口参数: ms (设置延时的毫秒值)
// 函数返回: 无
////////////////////////////////////////
void delay_ms(uint16_t ms)
{
    uint16_t i;

    do
    {
        i = MAIN_Fosc / 6000;
        while (--i);
    } while (--ms);
}


////////////////////////////////////////
// 时钟初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void CLK_Init(void)
{
    CLK_SYSCLK_Divider(10);             //切换主时钟前先将系统时钟降频

    HIRC_40M();                         //选择内部预置的频率

    CLK_MCLK_HIRC();                    //选择内部高精度HIRC作为主时钟
    CLK_MCLK2_BYPASS();                 //旁路MCLK2,直接使用MCLK选择

    CLK_SYSCLK_Divider(1);              //设置系统时钟分频系数

    CLK_HSIOCK_MCLK();                  //选择MCLK主时钟作为高速外设时钟源
    CLK_HSIOCK_Divider(1);              //设置高速外设时钟预分频系数

    CLK_SPICLK_Divider(1);              //设置SPI时钟预分频系数
    CLK_I2SCLK_Divider(1);              //设置I2S时钟预分频系数
    CLK_PWMACLK_Divider(1);             //设置PWMA时钟预分频系数
    CLK_PWMBCLK_Divider(1);             //设置PWMB时钟预分频系数
    CLK_TFPUCLK_Divider(1);             //设置TFPU时钟预分频系数
}

////////////////////////////////////////
// USB库初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_Init(void)
{
    usb_init();                         //初始化USB模块
    USB_SetIntPriority(3);              //设置中断为最高优先级
    set_usb_OUT_callback(USBLIB_OUT_Callback); //设置USB中断回调函数
    set_usb_ispcmd("@STCISP#");         //设置USB不停电下载命令
}

////////////////////////////////////////
// 等待USB配置完成函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void USBLIB_WaitConfiged(void)
{
    while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
}

////////////////////////////////////////
// USB设备接收数据中断回调程序
// 入口参数: 无
// 函数返回: 无
// OutNumber:USB设备接收到的数据长度
// UsbOutBuffer:保存USB设备接收到的数据
////////////////////////////////////////
void USBLIB_OUT_Callback(void)
{
    //USB_SendData(UsbOutBuffer, OutNumber);
          //将接收的数据,直接送回主机,用于演示测试
    //用户请自行将上句,改成用户自己实际需要的用户代码

//下面是用户自己添加的代码取代上面的演示程序

                if(UsbOutBuffer[0]==6)
                                printf_usb("HelloWorld!\r\n"); //如接收到的数据包的第0个字节是 6,打印“HelloWorld!"
                else if(UsbOutBuffer[0]==7)
                                printf_usb("China!\r\n");        //如接收到的数据包的第0个字节是7,打印“China!"
}


printf_usb_INT.zip

138.49 KB, 下载次数: 14

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-04-30 09:01:34

1

主题

66

回帖

682

积分

高级会员

积分
682
发表于 2025-4-16 08:58:18 | 显示全部楼层

使用【AiCube】助手创建:printf_usb("HelloWorld !\r\n"),第一个完整的C语言程序
截图202504160856045254.jpg

CDC(printf_usb)(AiCube).zip

136.99 KB, 下载次数: 2

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-16 08:59:59 | 显示全部楼层

#ifndef __AI8051U_H__
#define __AI8051U_H__

/////////////////////////////////////////////////

#include "stdio.h"
#include "intrins.h"

//修正编译器的LCALL 0x0000异常
extern void _m(void);
#define main(x) main(x){_m();sprintf(0, "0");}; void _m(x)

/////////////////////////////////////////////////

sfr         P0          =           0x80;
    sbit    P00         =           P0^0;
    sbit    P01         =           P0^1;
    sbit    P02         =           P0^2;
    sbit    P03         =           P0^3;
    sbit    P04         =           P0^4;
    sbit    P05         =           P0^5;
    sbit    P06         =           P0^6;
    sbit    P07         =           P0^7;

sfr         SP          =           0x81;
sfr         DPL         =           0x82;
sfr         DPH         =           0x83;
sfr         DPXL        =           0x84;
sfr         SPH         =           0x85;

sfr         PCON        =           0x87;
    sbit    SMOD        =           PCON^7;
    sbit    SMOD0       =           PCON^6;
    sbit    LVDF        =           PCON^5;
    sbit    POF         =           PCON^4;
    sbit    GF1         =           PCON^3;
    sbit    GF0         =           PCON^2;
    sbit    PD          =           PCON^1;
    sbit    IDL         =           PCON^0;

sfr         TCON        =           0x88;
    sbit    TF1         =           TCON^7;
    sbit    TR1         =           TCON^6;
    sbit    TF0         =           TCON^5;
    sbit    TR0         =           TCON^4;
    sbit    IE1         =           TCON^3;
    sbit    IT1         =           TCON^2;
    sbit    IE0         =           TCON^1;
    sbit    IT0         =           TCON^0;

sfr         TMOD        =           0x89;
    sbit    T1_GATE     =           TMOD^7;
    sbit    T1_CT       =           TMOD^6;
    sbit    T1_M1       =           TMOD^5;
    sbit    T1_M0       =           TMOD^4;
    sbit    T0_GATE     =           TMOD^3;
    sbit    T0_CT       =           TMOD^2;
    sbit    T0_M1       =           TMOD^1;
    sbit    T0_M0       =           TMOD^0;

sfr         TL0         =           0x8a;
sfr         TL1         =           0x8b;
sfr         TH0         =           0x8c;
sfr         TH1         =           0x8d;

sfr         AUXR        =           0x8e;
    sbit    T0x12       =           AUXR^7;
    sbit    T1x12       =           AUXR^6;
    sbit    S1M0x6      =           AUXR^5;
    sbit    T2R         =           AUXR^4;
    sbit    T2_CT       =           AUXR^3;
    sbit    T2x12       =           AUXR^2;
    sbit    EXTRAM      =           AUXR^1;
    sbit    S1BRT       =           AUXR^0;

sfr         INTCLKO     =           0x8f;
    sbit    EX4         =           INTCLKO^6;
    sbit    EX3         =           INTCLKO^5;
    sbit    EX2         =           INTCLKO^4;
    sbit    T2CLKO      =           INTCLKO^2;
    sbit    T1CLKO      =           INTCLKO^1;
    sbit    T0CLKO      =           INTCLKO^0;

sfr         P1          =           0x90;
    sbit    P10         =           P1^0;
    sbit    P11         =           P1^1;
    sbit    P12         =           P1^2;
    sbit    P13         =           P1^3;
    sbit    P14         =           P1^4;
    sbit    P15         =           P1^5;
    sbit    P16         =           P1^6;
    sbit    P17         =           P1^7;

sfr         P1M1        =           0x91;
sfr         P1M0        =           0x92;
sfr         P0M1        =           0x93;
sfr         P0M0        =           0x94;
sfr         P2M1        =           0x95;
sfr         P2M0        =           0x96;

sfr         AUXR2       =           0x97;
    sbit    RAMTINY     =           AUXR2^7;
    sbit    CPUMODE     =           AUXR2^6;
    sbit    RAMEXE      =           AUXR2^5;
    sbit    CANFD       =           AUXR2^4;
    sbit    CANSEL      =           AUXR2^3;
    sbit    CAN2EN      =           AUXR2^2;
    sbit    CANEN       =           AUXR2^1;
    sbit    LINEN       =           AUXR2^0;

sfr         SCON        =           0x98;
    sbit    SM0         =           SCON^7;
    sbit    SM1         =           SCON^6;
    sbit    SM2         =           SCON^5;
    sbit    REN         =           SCON^4;
    sbit    TB8         =           SCON^3;
    sbit    RB8         =           SCON^2;
    sbit    TI          =           SCON^1;
    sbit    RI          =           SCON^0;

sfr         SBUF        =           0x99;

sfr         S2CON       =           0x9a;
    sbit    S2SM0       =           S2CON^7;
    sbit    S2SM1       =           S2CON^6;
    sbit    S2SM2       =           S2CON^5;
    sbit    S2REN       =           S2CON^4;
    sbit    S2TB8       =           S2CON^3;
    sbit    S2RB8       =           S2CON^2;
    sbit    S2TI        =           S2CON^1;
    sbit    S2RI        =           S2CON^0;

sfr         S2BUF       =           0x9b;

sfr         IRCBAND     =           0x9d;
    sbit    USBCKS      =           IRCBAND^7;
    sbit    USBCKS2     =           IRCBAND^6;
    sbit    HIRCSEL1    =           IRCBAND^1;
    sbit    HIRCSEL0    =           IRCBAND^0;

sfr         LIRTRIM     =           0x9e;
sfr         IRTRIM      =           0x9f;

sfr         P2          =           0xa0;
    sbit    P20         =           P2^0;
    sbit    P21         =           P2^1;
    sbit    P22         =           P2^2;
    sbit    P23         =           P2^3;
    sbit    P24         =           P2^4;
    sbit    P25         =           P2^5;
    sbit    P26         =           P2^6;
    sbit    P27         =           P2^7;

sfr         BUS_SPEED   =           0xa1;

sfr         P_SW1       =           0xa2;
    sbit    S1_S1       =           P_SW1^7;
    sbit    S1_S0       =           P_SW1^6;
    sbit    CAN_S1      =           P_SW1^5;
    sbit    CAN_S0      =           P_SW1^4;
    sbit    SPI_S1      =           P_SW1^3;
    sbit    SPI_S0      =           P_SW1^2;
    sbit    LIN_S1      =           P_SW1^1;
    sbit    LIN_S0      =           P_SW1^0;

sfr         VRTRIM      =           0xa6;

sfr         IE          =           0xa8;
    sbit    EA          =           IE^7;
    sbit    ELVD        =           IE^6;
    sbit    EADC        =           IE^5;
    sbit    ES          =           IE^4;
    sbit    ET1         =           IE^3;
    sbit    EX1         =           IE^2;
    sbit    ET0         =           IE^1;
    sbit    EX0         =           IE^0;

sfr         SADDR       =           0xa9;
sfr         WKTCL       =           0xaa;
sfr         WKTCH       =           0xab;

sfr         S3CON       =           0xac;
    sbit    S3SM0       =           S3CON^7;
    sbit    S3ST3       =           S3CON^6;
    sbit    S3SM2       =           S3CON^5;
    sbit    S3REN       =           S3CON^4;
    sbit    S3TB8       =           S3CON^3;
    sbit    S3RB8       =           S3CON^2;
    sbit    S3TI        =           S3CON^1;
    sbit    S3RI        =           S3CON^0;

sfr         S3BUF       =           0xad;
sfr         TA          =           0xae;

sfr         IE2         =           0xaf;
    sbit    EUSB        =           IE2^7;
    sbit    ET4         =           IE2^6;
    sbit    ET3         =           IE2^5;
    sbit    ES4         =           IE2^4;
    sbit    ES3         =           IE2^3;
    sbit    ET2         =           IE2^2;
    sbit    ESPI        =           IE2^1;
    sbit    ES2         =           IE2^0;

sfr         P3          =           0xb0;
    sbit    P30         =           P3^0;
    sbit    P31         =           P3^1;
    sbit    P32         =           P3^2;
    sbit    P33         =           P3^3;
    sbit    P34         =           P3^4;
    sbit    P35         =           P3^5;
    sbit    P36         =           P3^6;
    sbit    P37         =           P3^7;

    sbit    RD          =           P3^7;
    sbit    WR          =           P3^6;
    sbit    T1          =           P3^5;
    sbit    T0          =           P3^4;
    sbit    INT1        =           P3^3;
    sbit    INT0        =           P3^2;
    sbit    TXD         =           P3^1;
    sbit    RXD         =           P3^0;

sfr         P3M1        =           0xb1;
sfr         P3M0        =           0xb2;
sfr         P4M1        =           0xb3;
sfr         P4M0        =           0xb4;

sfr         IP2         =           0xb5;
    sbit    PUSB        =           IP2^7;
    sbit    PI2C        =           IP2^6;
    sbit    PCMP        =           IP2^5;
    sbit    PX4         =           IP2^4;
    sbit    PPWMB       =           IP2^3;
    sbit    PPWMA       =           IP2^2;
    sbit    PSPI        =           IP2^1;
    sbit    PS2         =           IP2^0;

sfr         IP2H        =           0xb6;
    sbit    PUSBH       =           IP2H^7;
    sbit    PI2CH       =           IP2H^6;
    sbit    PCMPH       =           IP2H^5;
    sbit    PX4H        =           IP2H^4;
    sbit    PPWMBH      =           IP2H^3;
    sbit    PPWMAH      =           IP2H^2;
    sbit    PSPIH       =           IP2H^1;
    sbit    PS2H        =           IP2H^0;

sfr         IPH         =           0xb7;
    sbit    PPCAH       =           IPH^7;
    sbit    PLVDH       =           IPH^6;
    sbit    PADCH       =           IPH^5;
    sbit    PSH         =           IPH^4;
    sbit    PT1H        =           IPH^3;
    sbit    PX1H        =           IPH^2;
    sbit    PT0H        =           IPH^1;
    sbit    PX0H        =           IPH^0;

sfr         IP          =           0xb8;
    sbit    PPCA        =           IP^7;
    sbit    PLVD        =           IP^6;
    sbit    PADC        =           IP^5;
    sbit    PS          =           IP^4;
    sbit    PT1         =           IP^3;
    sbit    PX1         =           IP^2;
    sbit    PT0         =           IP^1;
    sbit    PX0         =           IP^0;

sfr         SADEN       =           0xb9;

sfr         P_SW2       =           0xba;
    sbit    EAXFR       =           P_SW2^7;
    sbit    I2C_S1      =           P_SW2^5;
    sbit    I2C_S0      =           P_SW2^4;
    sbit    CMPO_S      =           P_SW2^3;
    sbit    S4_S        =           P_SW2^2;
    sbit    S3_S        =           P_SW2^1;
    sbit    S2_S        =           P_SW2^0;

sfr         P_SW3       =           0xbb;
    sbit    I2S_S1      =           P_SW3^7;
    sbit    I2S_S0      =           P_SW3^6;
    sbit    S2SPI_S1    =           P_SW3^5;
    sbit    S2SPI_S0    =           P_SW3^4;
    sbit    S1SPI_S1    =           P_SW3^3;
    sbit    S1SPI_S0    =           P_SW3^2;
    sbit    CAN2_S1     =           P_SW3^1;
    sbit    CAN2_S0     =           P_SW3^0;

sfr         ADC_CONTR   =           0xbc;
    sbit    ADC_POWER   =           ADC_CONTR^7;
    sbit    ADC_START   =           ADC_CONTR^6;
    sbit    ADC_FLAG    =           ADC_CONTR^5;
    sbit    ADC_EPWMT   =           ADC_CONTR^4;

sfr         ADC_RES     =           0xbd;
sfr         ADC_RESL    =           0xbe;

sfr         P_SW4       =           0xbf;
    sbit    QSPI_S1     =           P_SW4^1;
    sbit    QSPI_S0     =           P_SW4^0;

sfr         P4          =           0xc0;
    sbit    P40         =           P4^0;
    sbit    P41         =           P4^1;
    sbit    P42         =           P4^2;
    sbit    P43         =           P4^3;
    sbit    P44         =           P4^4;
    sbit    P45         =           P4^5;
    sbit    P46         =           P4^6;
    sbit    P47         =           P4^7;

sfr         WDT_CONTR   =           0xc1;
    sbit    WDT_FLAG    =           WDT_CONTR^7;
    sbit    EN_WDT      =           WDT_CONTR^5;
    sbit    CLR_WDT     =           WDT_CONTR^4;
    sbit    IDL_WDT     =           WDT_CONTR^3;

sfr         IAP_DATA    =           0xc2;
sfr         IAP_ADDRH   =           0xc3;
sfr         IAP_ADDRL   =           0xc4;
sfr         IAP_CMD     =           0xc5;
sfr         IAP_TRIG    =           0xc6;

sfr         IAP_CONTR   =           0xc7;
    sbit    IAPEN       =           IAP_CONTR^7;
    sbit    SWBS        =           IAP_CONTR^6;
    sbit    SWRST       =           IAP_CONTR^5;
    sbit    CMD_FAIL    =           IAP_CONTR^4;
    sbit    SWBS2       =           IAP_CONTR^3;

sfr         P5          =           0xc8;
    sbit    P50         =           P5^0;
    sbit    P51         =           P5^1;
    sbit    P52         =           P5^2;
    sbit    P53         =           P5^3;
    sbit    P54         =           P5^4;
    sbit    P55         =           P5^5;
    sbit    P56         =           P5^6;
    sbit    P57         =           P5^7;

sfr         P5M1        =           0xc9;
sfr         P5M0        =           0xca;
sfr         P6M1        =           0xcb;
sfr         P6M0        =           0xcc;

sfr         SPSTAT      =           0xcd;
    sbit    SPIF        =           SPSTAT^7;
    sbit    WCOL        =           SPSTAT^6;

sfr         SPCTL       =           0xce;
    sbit    SSIG        =           SPCTL^7;
    sbit    SPEN        =           SPCTL^6;
    sbit    DORD        =           SPCTL^5;
    sbit    MSTR        =           SPCTL^4;
    sbit    CPOL        =           SPCTL^3;
    sbit    CPHA        =           SPCTL^2;
    sbit    SPR1        =           SPCTL^1;
    sbit    SPR0        =           SPCTL^0;

sfr         SPDAT       =           0xcf;

sfr         PSW         =           0xd0;
    sbit    CY          =           PSW^7;
    sbit    AC          =           PSW^6;
    sbit    F0          =           PSW^5;
    sbit    RS1         =           PSW^4;
    sbit    RS0         =           PSW^3;
    sbit    OV          =           PSW^2;
    sbit    F1          =           PSW^1;
    sbit    P           =           PSW^0;

sfr         PSW1        =           0xd1;
    sbit    N           =           PSW1^5;
    sbit    Z           =           PSW1^1;

sfr         T4H         =           0xd2;
sfr         T4L         =           0xd3;
sfr         T3H         =           0xd4;
sfr         T3L         =           0xd5;
sfr         T2H         =           0xd6;
sfr         T2L         =           0xd7;

sfr         TH4         =           0xd2;
sfr         TL4         =           0xd3;
sfr         TH3         =           0xd4;
sfr         TL3         =           0xd5;
sfr         TH2         =           0xd6;
sfr         TL2         =           0xd7;

sfr         USBCLK      =           0xdc;

sfr         T3T4M       =           0xdd;
sfr         T4T3M       =           0xdd;
    sbit    T4R         =           T4T3M^7;
    sbit    T4_CT       =           T4T3M^6;
    sbit    T4x12       =           T4T3M^5;
    sbit    T4CLKO      =           T4T3M^4;
    sbit    T3R         =           T4T3M^3;
    sbit    T3_CT       =           T4T3M^2;
    sbit    T3x12       =           T4T3M^1;
    sbit    T3CLKO      =           T4T3M^0;

sfr         ADCCFG      =           0xde;
    sbit    RESFMT      =           ADCCFG^5;

sfr         IP3         =           0xdf;
    sbit    PI2S        =           IP3^3;
    sbit    PRTC        =           IP3^2;
    sbit    PS4         =           IP3^1;
    sbit    PS3         =           IP3^0;

sfr         ACC         =           0xE0;
    sbit    ACC0        =           ACC^0;
    sbit    ACC1        =           ACC^1;
    sbit    ACC2        =           ACC^2;
    sbit    ACC3        =           ACC^3;
    sbit    ACC4        =           ACC^4;
    sbit    ACC5        =           ACC^5;
    sbit    ACC6        =           ACC^6;
    sbit    ACC7        =           ACC^7;

sfr         P7M1        =           0xe1;
sfr         P7M0        =           0xe2;
sfr         DPS         =           0xe3;

sfr         CMPCR1      =           0xe6;
    sbit    CMPEN       =           CMPCR1^7;
    sbit    CMPIF       =           CMPCR1^6;
    sbit    PIE         =           CMPCR1^5;
    sbit    NIE         =           CMPCR1^4;
    sbit    CMPOE       =           CMPCR1^1;
    sbit    CMPRES      =           CMPCR1^0;

sfr         CMPCR2      =           0xe7;
    sbit    INVCMPO     =           CMPCR2^7;
    sbit    DISFLT      =           CMPCR2^6;

sfr         P6          =           0xe8;
    sbit    P60         =           P6^0;
    sbit    P61         =           P6^1;
    sbit    P62         =           P6^2;
    sbit    P63         =           P6^3;
    sbit    P64         =           P6^4;
    sbit    P65         =           P6^5;
    sbit    P66         =           P6^6;
    sbit    P67         =           P6^7;

sfr         WTST        =           0xe9;
sfr         CKCON       =           0xea;
sfr         MXAX        =           0xeb;
sfr         USBDAT      =           0xec;
sfr         DMAIR       =           0xed;

sfr         IP3H        =           0xee;
    sbit    PI2SH       =           IP3H^3;
    sbit    PRTCH       =           IP3H^2;
    sbit    PS4H        =           IP3H^1;
    sbit    PS3H        =           IP3H^0;

sfr         AUXINTIF    =           0xef;
    sbit    INT4IF      =           AUXINTIF^6;
    sbit    INT3IF      =           AUXINTIF^5;
    sbit    INT2IF      =           AUXINTIF^4;
    sbit    T4IF        =           AUXINTIF^2;
    sbit    T3IF        =           AUXINTIF^1;
    sbit    T2IF        =           AUXINTIF^0;

sfr         B           =           0xF0;
    sbit    B0          =           B^0;
    sbit    B1          =           B^1;
    sbit    B2          =           B^2;
    sbit    B3          =           B^3;
    sbit    B4          =           B^4;
    sbit    B5          =           B^5;
    sbit    B6          =           B^6;
    sbit    B7          =           B^7;

sfr         USBCON      =           0xf4;
    sbit    ENUSB       =           USBCON^7;
    sbit    ENUSBRST    =           USBCON^6;
    sbit    PS2M        =           USBCON^5;
    sbit    PUEN        =           USBCON^4;
    sbit    PDEN        =           USBCON^3;
    sbit    DFREC       =           USBCON^2;
    sbit    DP          =           USBCON^1;
    sbit    DM          =           USBCON^0;

sfr         IAP_TPS     =           0xf5;
sfr         IAP_ADDRE   =           0xf6;

sfr         P7          =           0xf8;
    sbit    P70         =           P7^0;
    sbit    P71         =           P7^1;
    sbit    P72         =           P7^2;
    sbit    P73         =           P7^3;
    sbit    P74         =           P7^4;
    sbit    P75         =           P7^5;
    sbit    P76         =           P7^6;
    sbit    P77         =           P7^7;

sfr         USBADR      =           0xfc;

sfr         S4CON       =           0xfd;
    sbit    S4SM0       =           S4CON^7;
    sbit    S4ST4       =           S4CON^6;
    sbit    S4SM2       =           S4CON^5;
    sbit    S4REN       =           S4CON^4;
    sbit    S4TB8       =           S4CON^3;
    sbit    S4RB8       =           S4CON^2;
    sbit    S4TI        =           S4CON^1;
    sbit    S4RI        =           S4CON^0;

sfr         S4BUF       =           0xfe;

sfr         RSTCFG      =           0xff;
    sbit    ENLVR       =           RSTCFG^6;
    sbit    P47RST      =           RSTCFG^4;

/////////////////////////////////////////////////
//
//如下特殊功能寄存器位于扩展RAM区域
//访问这些寄存器,需先将EAXFR设置为1,才可正常读写
//    EAXFR = 1;
//或者
//    P_SW2 |= 0x80;
///////////////////////////////////////////////////

/////////////////////////////////////////////////
//7E:FF00H-7E:FFFFH
/////////////////////////////////////////////////



/////////////////////////////////////////////////
//7E:FE00H-7E:FEFFH
/////////////////////////////////////////////////

#define     CLKSEL                  (*(unsigned char volatile far *)0x7efe00)
#define     CLKDIV                  (*(unsigned char volatile far *)0x7efe01)
#define     HIRCCR                  (*(unsigned char volatile far *)0x7efe02)
#define     XOSCCR                  (*(unsigned char volatile far *)0x7efe03)
#define     IRC32KCR                (*(unsigned char volatile far *)0x7efe04)
#define     MCLKOCR                 (*(unsigned char volatile far *)0x7efe05)
#define     IRCDB                   (*(unsigned char volatile far *)0x7efe06)
#define     IRC48MCR                (*(unsigned char volatile far *)0x7efe07)
#define     X32KCR                  (*(unsigned char volatile far *)0x7efe08)
#define     HSCLKDIV                (*(unsigned char volatile far *)0x7efe0b)

#define     P0PU                    (*(unsigned char volatile far *)0x7efe10)
#define     P1PU                    (*(unsigned char volatile far *)0x7efe11)
#define     P2PU                    (*(unsigned char volatile far *)0x7efe12)
#define     P3PU                    (*(unsigned char volatile far *)0x7efe13)
#define     P4PU                    (*(unsigned char volatile far *)0x7efe14)
#define     P5PU                    (*(unsigned char volatile far *)0x7efe15)
#define     P6PU                    (*(unsigned char volatile far *)0x7efe16)
#define     P7PU                    (*(unsigned char volatile far *)0x7efe17)
#define     P0NCS                   (*(unsigned char volatile far *)0x7efe18)
#define     P1NCS                   (*(unsigned char volatile far *)0x7efe19)
#define     P2NCS                   (*(unsigned char volatile far *)0x7efe1a)
#define     P3NCS                   (*(unsigned char volatile far *)0x7efe1b)
#define     P4NCS                   (*(unsigned char volatile far *)0x7efe1c)
#define     P5NCS                   (*(unsigned char volatile far *)0x7efe1d)
#define     P6NCS                   (*(unsigned char volatile far *)0x7efe1e)
#define     P7NCS                   (*(unsigned char volatile far *)0x7efe1f)
#define     P0SR                    (*(unsigned char volatile far *)0x7efe20)
#define     P1SR                    (*(unsigned char volatile far *)0x7efe21)
#define     P2SR                    (*(unsigned char volatile far *)0x7efe22)
#define     P3SR                    (*(unsigned char volatile far *)0x7efe23)
#define     P4SR                    (*(unsigned char volatile far *)0x7efe24)
#define     P5SR                    (*(unsigned char volatile far *)0x7efe25)
#define     P6SR                    (*(unsigned char volatile far *)0x7efe26)
#define     P7SR                    (*(unsigned char volatile far *)0x7efe27)
#define     P0DR                    (*(unsigned char volatile far *)0x7efe28)
#define     P1DR                    (*(unsigned char volatile far *)0x7efe29)
#define     P2DR                    (*(unsigned char volatile far *)0x7efe2a)
#define     P3DR                    (*(unsigned char volatile far *)0x7efe2b)
#define     P4DR                    (*(unsigned char volatile far *)0x7efe2c)
#define     P5DR                    (*(unsigned char volatile far *)0x7efe2d)
#define     P6DR                    (*(unsigned char volatile far *)0x7efe2e)
#define     P7DR                    (*(unsigned char volatile far *)0x7efe2f)
#define     P0IE                    (*(unsigned char volatile far *)0x7efe30)
#define     P1IE                    (*(unsigned char volatile far *)0x7efe31)
#define     P2IE                    (*(unsigned char volatile far *)0x7efe32)
#define     P3IE                    (*(unsigned char volatile far *)0x7efe33)
#define     P4IE                    (*(unsigned char volatile far *)0x7efe34)
#define     P5IE                    (*(unsigned char volatile far *)0x7efe35)
#define     P6IE                    (*(unsigned char volatile far *)0x7efe36)
#define     P7IE                    (*(unsigned char volatile far *)0x7efe37)
#define     P0PD                    (*(unsigned char volatile far *)0x7efe40)
#define     P1PD                    (*(unsigned char volatile far *)0x7efe41)
#define     P2PD                    (*(unsigned char volatile far *)0x7efe42)
#define     P3PD                    (*(unsigned char volatile far *)0x7efe43)
#define     P4PD                    (*(unsigned char volatile far *)0x7efe44)
#define     P5PD                    (*(unsigned char volatile far *)0x7efe45)
#define     P6PD                    (*(unsigned char volatile far *)0x7efe46)
#define     P7PD                    (*(unsigned char volatile far *)0x7efe47)
#define     P0BP                    (*(unsigned char volatile far *)0x7efe48)
#define     P1BP                    (*(unsigned char volatile far *)0x7efe49)
#define     P2BP                    (*(unsigned char volatile far *)0x7efe4a)
#define     P3BP                    (*(unsigned char volatile far *)0x7efe4b)
#define     P4BP                    (*(unsigned char volatile far *)0x7efe4c)
#define     P5BP                    (*(unsigned char volatile far *)0x7efe4d)
#define     P6BP                    (*(unsigned char volatile far *)0x7efe4e)
#define     P7BP                    (*(unsigned char volatile far *)0x7efe4f)

#define     LCMIFCFG                (*(unsigned char volatile far *)0x7efe50)
#define     LCMIFCFG2               (*(unsigned char volatile far *)0x7efe51)
#define     LCMIFCR                 (*(unsigned char volatile far *)0x7efe52)
#define     LCMIFSTA                (*(unsigned char volatile far *)0x7efe53)
#define     LCMIFDATL               (*(unsigned char volatile far *)0x7efe54)
#define     LCMIFDATH               (*(unsigned char volatile far *)0x7efe55)
#define     LCMIFPSCR               (*(unsigned char volatile far *)0x7efe56)

#define     RTCCR                   (*(unsigned char volatile far *)0x7efe60)
#define     RTCCFG                  (*(unsigned char volatile far *)0x7efe61)
#define     RTCIEN                  (*(unsigned char volatile far *)0x7efe62)
#define     RTCIF                   (*(unsigned char volatile far *)0x7efe63)
#define     ALAHOUR                 (*(unsigned char volatile far *)0x7efe64)
#define     ALAMIN                  (*(unsigned char volatile far *)0x7efe65)
#define     ALASEC                  (*(unsigned char volatile far *)0x7efe66)
#define     ALASSEC                 (*(unsigned char volatile far *)0x7efe67)
#define     INIYEAR                 (*(unsigned char volatile far *)0x7efe68)
#define     INIMONTH                (*(unsigned char volatile far *)0x7efe69)
#define     INIDAY                  (*(unsigned char volatile far *)0x7efe6a)
#define     INIHOUR                 (*(unsigned char volatile far *)0x7efe6b)
#define     INIMIN                  (*(unsigned char volatile far *)0x7efe6c)
#define     INISEC                  (*(unsigned char volatile far *)0x7efe6d)
#define     INISSEC                 (*(unsigned char volatile far *)0x7efe6e)
#define     INIWEEK                 (*(unsigned char volatile far *)0x7efe6f)
#define     WEEK                    (*(unsigned char volatile far *)0x7efe6f)
#define     YEAR                    (*(unsigned char volatile far *)0x7efe70)
#define     MONTH                   (*(unsigned char volatile far *)0x7efe71)
#define     DAY                     (*(unsigned char volatile far *)0x7efe72)
#define     HOUR                    (*(unsigned char volatile far *)0x7efe73)
#define     MIN                     (*(unsigned char volatile far *)0x7efe74)
#define     SEC                     (*(unsigned char volatile far *)0x7efe75)
#define     SSEC                    (*(unsigned char volatile far *)0x7efe76)

#define     T11CR                   (*(unsigned char volatile far *)0x7efe78)
#define     T11PS                   (*(unsigned char volatile far *)0x7efe79)
#define     T11H                    (*(unsigned char volatile far *)0x7efe7a)
#define     T11L                    (*(unsigned char volatile far *)0x7efe7b)

#define     I2CCFG                  (*(unsigned char volatile far *)0x7efe80)
#define     I2CMSCR                 (*(unsigned char volatile far *)0x7efe81)
#define     I2CMSST                 (*(unsigned char volatile far *)0x7efe82)
#define     I2CSLCR                 (*(unsigned char volatile far *)0x7efe83)
#define     I2CSLST                 (*(unsigned char volatile far *)0x7efe84)
#define     I2CSLADR                (*(unsigned char volatile far *)0x7efe85)
#define     I2CTXD                  (*(unsigned char volatile far *)0x7efe86)
#define     I2CRXD                  (*(unsigned char volatile far *)0x7efe87)
#define     I2CMSAUX                (*(unsigned char volatile far *)0x7efe88)
#define     I2CPSCR                 (*(unsigned char volatile far *)0x7efe89)

#define     SPI_CLKDIV              (*(unsigned char volatile far *)0x7efe90)
#define     PWMA_CLKDIV             (*(unsigned char volatile far *)0x7efe91)
#define     PWMB_CLKDIV             (*(unsigned char volatile far *)0x7efe92)
#define     TFPU_CLKDIV             (*(unsigned char volatile far *)0x7efe93)
#define     I2S_CLKDIV              (*(unsigned char volatile far *)0x7efe94)

#define     RSTFLAG                 (*(unsigned char volatile far *)0x7efe99)
#define     RSTCR0                  (*(unsigned char volatile far *)0x7efe9a)
#define     RSTCR1                  (*(unsigned char volatile far *)0x7efe9b)
#define     RSTCR2                  (*(unsigned char volatile far *)0x7efe9c)
#define     RSTCR3                  (*(unsigned char volatile far *)0x7efe9d)
#define     RSTCR4                  (*(unsigned char volatile far *)0x7efe9e)
#define     RSTCR5                  (*(unsigned char volatile far *)0x7efe9f)

#define     TM0PS                   (*(unsigned char volatile far *)0x7efea0)
#define     TM1PS                   (*(unsigned char volatile far *)0x7efea1)
#define     TM2PS                   (*(unsigned char volatile far *)0x7efea2)
#define     TM3PS                   (*(unsigned char volatile far *)0x7efea3)
#define     TM4PS                   (*(unsigned char volatile far *)0x7efea4)
#define     ADCTIM                  (*(unsigned char volatile far *)0x7efea8)
#define     ADCEXCFG                (*(unsigned char volatile far *)0x7efead)
#define     CMPEXCFG                (*(unsigned char volatile far *)0x7efeae)

#define     PWMA_ETRPS              (*(unsigned char volatile far *)0x7efeb0)
#define     PWMA_ENO                (*(unsigned char volatile far *)0x7efeb1)
#define     PWMA_PS                 (*(unsigned char volatile far *)0x7efeb2)
#define     PWMA_IOAUX              (*(unsigned char volatile far *)0x7efeb3)
#define     PWMB_ETRPS              (*(unsigned char volatile far *)0x7efeb4)
#define     PWMB_ENO                (*(unsigned char volatile far *)0x7efeb5)
#define     PWMB_PS                 (*(unsigned char volatile far *)0x7efeb6)
#define     PWMB_IOAUX              (*(unsigned char volatile far *)0x7efeb7)
#define     PWMA_PS2                (*(unsigned char volatile far *)0x7efeb8)
#define     PWMA_RCRH               (*(unsigned char volatile far *)0x7efeb9)
#define     PWMB_RCRH               (*(unsigned char volatile far *)0x7efeba)

#define     PWMA_CR1                (*(unsigned char volatile far *)0x7efec0)
#define     PWMA_CR2                (*(unsigned char volatile far *)0x7efec1)
#define     PWMA_SMCR               (*(unsigned char volatile far *)0x7efec2)
#define     PWMA_ETR                (*(unsigned char volatile far *)0x7efec3)
#define     PWMA_IER                (*(unsigned char volatile far *)0x7efec4)
#define     PWMA_SR1                (*(unsigned char volatile far *)0x7efec5)
#define     PWMA_SR2                (*(unsigned char volatile far *)0x7efec6)
#define     PWMA_EGR                (*(unsigned char volatile far *)0x7efec7)
#define     PWMA_CCMR1              (*(unsigned char volatile far *)0x7efec8)
#define     PWMA_CCMR2              (*(unsigned char volatile far *)0x7efec9)
#define     PWMA_CCMR3              (*(unsigned char volatile far *)0x7efeca)
#define     PWMA_CCMR4              (*(unsigned char volatile far *)0x7efecb)
#define     PWMA_CCER1              (*(unsigned char volatile far *)0x7efecc)
#define     PWMA_CCER2              (*(unsigned char volatile far *)0x7efecd)
#define     PWMA_CNTRH              (*(unsigned char volatile far *)0x7efece)
#define     PWMA_CNTRL              (*(unsigned char volatile far *)0x7efecf)
#define     PWMA_PSCRH              (*(unsigned char volatile far *)0x7efed0)
#define     PWMA_PSCRL              (*(unsigned char volatile far *)0x7efed1)
#define     PWMA_ARRH               (*(unsigned char volatile far *)0x7efed2)
#define     PWMA_ARRL               (*(unsigned char volatile far *)0x7efed3)
#define     PWMA_RCR                (*(unsigned char volatile far *)0x7efed4)
#define     PWMA_CCR1H              (*(unsigned char volatile far *)0x7efed5)
#define     PWMA_CCR1L              (*(unsigned char volatile far *)0x7efed6)
#define     PWMA_CCR2H              (*(unsigned char volatile far *)0x7efed7)
#define     PWMA_CCR2L              (*(unsigned char volatile far *)0x7efed8)
#define     PWMA_CCR3H              (*(unsigned char volatile far *)0x7efed9)
#define     PWMA_CCR3L              (*(unsigned char volatile far *)0x7efeda)
#define     PWMA_CCR4H              (*(unsigned char volatile far *)0x7efedb)
#define     PWMA_CCR4L              (*(unsigned char volatile far *)0x7efedc)
#define     PWMA_BKR                (*(unsigned char volatile far *)0x7efedd)
#define     PWMA_DTR                (*(unsigned char volatile far *)0x7efede)
#define     PWMA_OISR               (*(unsigned char volatile far *)0x7efedf)

#define     PWMB_CR1                (*(unsigned char volatile far *)0x7efee0)
#define     PWMB_CR2                (*(unsigned char volatile far *)0x7efee1)
#define     PWMB_SMCR               (*(unsigned char volatile far *)0x7efee2)
#define     PWMB_ETR                (*(unsigned char volatile far *)0x7efee3)
#define     PWMB_IER                (*(unsigned char volatile far *)0x7efee4)
#define     PWMB_SR1                (*(unsigned char volatile far *)0x7efee5)
#define     PWMB_SR2                (*(unsigned char volatile far *)0x7efee6)
#define     PWMB_EGR                (*(unsigned char volatile far *)0x7efee7)
#define     PWMB_CCMR1              (*(unsigned char volatile far *)0x7efee8)
#define     PWMB_CCMR2              (*(unsigned char volatile far *)0x7efee9)
#define     PWMB_CCMR3              (*(unsigned char volatile far *)0x7efeea)
#define     PWMB_CCMR4              (*(unsigned char volatile far *)0x7efeeb)
#define     PWMB_CCER1              (*(unsigned char volatile far *)0x7efeec)
#define     PWMB_CCER2              (*(unsigned char volatile far *)0x7efeed)
#define     PWMB_CNTRH              (*(unsigned char volatile far *)0x7efeee)
#define     PWMB_CNTRL              (*(unsigned char volatile far *)0x7efeef)
#define     PWMB_PSCRH              (*(unsigned char volatile far *)0x7efef0)
#define     PWMB_PSCRL              (*(unsigned char volatile far *)0x7efef1)
#define     PWMB_ARRH               (*(unsigned char volatile far *)0x7efef2)
#define     PWMB_ARRL               (*(unsigned char volatile far *)0x7efef3)
#define     PWMB_RCR                (*(unsigned char volatile far *)0x7efef4)
#define     PWMB_CCR5H              (*(unsigned char volatile far *)0x7efef5)
#define     PWMB_CCR5L              (*(unsigned char volatile far *)0x7efef6)
#define     PWMB_CCR6H              (*(unsigned char volatile far *)0x7efef7)
#define     PWMB_CCR6L              (*(unsigned char volatile far *)0x7efef8)
#define     PWMB_CCR7H              (*(unsigned char volatile far *)0x7efef9)
#define     PWMB_CCR7L              (*(unsigned char volatile far *)0x7efefa)
#define     PWMB_CCR8H              (*(unsigned char volatile far *)0x7efefb)
#define     PWMB_CCR8L              (*(unsigned char volatile far *)0x7efefc)
#define     PWMB_BKR                (*(unsigned char volatile far *)0x7efefd)
#define     PWMB_DTR                (*(unsigned char volatile far *)0x7efefe)
#define     PWMB_OISR               (*(unsigned char volatile far *)0x7efeff)

/////////////////////////////////////////////////
//7E:FD00H-7E:FDFFH
/////////////////////////////////////////////////

#define     P0INTE                  (*(unsigned char volatile far *)0x7efd00)
#define     P1INTE                  (*(unsigned char volatile far *)0x7efd01)
#define     P2INTE                  (*(unsigned char volatile far *)0x7efd02)
#define     P3INTE                  (*(unsigned char volatile far *)0x7efd03)
#define     P4INTE                  (*(unsigned char volatile far *)0x7efd04)
#define     P5INTE                  (*(unsigned char volatile far *)0x7efd05)
#define     P6INTE                  (*(unsigned char volatile far *)0x7efd06)
#define     P7INTE                  (*(unsigned char volatile far *)0x7efd07)
#define     P0INTF                  (*(unsigned char volatile far *)0x7efd10)
#define     P1INTF                  (*(unsigned char volatile far *)0x7efd11)
#define     P2INTF                  (*(unsigned char volatile far *)0x7efd12)
#define     P3INTF                  (*(unsigned char volatile far *)0x7efd13)
#define     P4INTF                  (*(unsigned char volatile far *)0x7efd14)
#define     P5INTF                  (*(unsigned char volatile far *)0x7efd15)
#define     P6INTF                  (*(unsigned char volatile far *)0x7efd16)
#define     P7INTF                  (*(unsigned char volatile far *)0x7efd17)
#define     P0IM0                   (*(unsigned char volatile far *)0x7efd20)
#define     P1IM0                   (*(unsigned char volatile far *)0x7efd21)
#define     P2IM0                   (*(unsigned char volatile far *)0x7efd22)
#define     P3IM0                   (*(unsigned char volatile far *)0x7efd23)
#define     P4IM0                   (*(unsigned char volatile far *)0x7efd24)
#define     P5IM0                   (*(unsigned char volatile far *)0x7efd25)
#define     P6IM0                   (*(unsigned char volatile far *)0x7efd26)
#define     P7IM0                   (*(unsigned char volatile far *)0x7efd27)
#define     P0IM1                   (*(unsigned char volatile far *)0x7efd30)
#define     P1IM1                   (*(unsigned char volatile far *)0x7efd31)
#define     P2IM1                   (*(unsigned char volatile far *)0x7efd32)
#define     P3IM1                   (*(unsigned char volatile far *)0x7efd33)
#define     P4IM1                   (*(unsigned char volatile far *)0x7efd34)
#define     P5IM1                   (*(unsigned char volatile far *)0x7efd35)
#define     P6IM1                   (*(unsigned char volatile far *)0x7efd36)
#define     P7IM1                   (*(unsigned char volatile far *)0x7efd37)
#define     P0WKUE                  (*(unsigned char volatile far *)0x7efd40)
#define     P1WKUE                  (*(unsigned char volatile far *)0x7efd41)
#define     P2WKUE                  (*(unsigned char volatile far *)0x7efd42)
#define     P3WKUE                  (*(unsigned char volatile far *)0x7efd43)
#define     P4WKUE                  (*(unsigned char volatile far *)0x7efd44)
#define     P5WKUE                  (*(unsigned char volatile far *)0x7efd45)
#define     P6WKUE                  (*(unsigned char volatile far *)0x7efd46)
#define     P7WKUE                  (*(unsigned char volatile far *)0x7efd47)

#define     CCAPM2                  (*(unsigned char volatile far *)0x7efd50)
#define     CCAP2L                  (*(unsigned char volatile far *)0x7efd51)
#define     CCAP2H                  (*(unsigned char volatile far *)0x7efd52)
#define     PCA_PWM2                (*(unsigned char volatile far *)0x7efd53)
#define     CCAPM3                  (*(unsigned char volatile far *)0x7efd54)
#define     CCAP3L                  (*(unsigned char volatile far *)0x7efd55)
#define     CCAP3H                  (*(unsigned char volatile far *)0x7efd56)
#define     PCA_PWM3                (*(unsigned char volatile far *)0x7efd57)
#define     CCAPM0                  (*(unsigned char volatile far *)0x7efd58)
#define     CCAP0L                  (*(unsigned char volatile far *)0x7efd59)
#define     CCAP0H                  (*(unsigned char volatile far *)0x7efd5a)
#define     PCA_PWM0                (*(unsigned char volatile far *)0x7efd5b)
#define     CCAPM1                  (*(unsigned char volatile far *)0x7efd5c)
#define     CCAP1L                  (*(unsigned char volatile far *)0x7efd5d)
#define     CCAP1H                  (*(unsigned char volatile far *)0x7efd5e)
#define     PCA_PWM1                (*(unsigned char volatile far *)0x7efd5f)

#define     PINIPL                  (*(unsigned char volatile far *)0x7efd60)
#define     PINIPH                  (*(unsigned char volatile far *)0x7efd61)

#define     CCON                    (*(unsigned char volatile far *)0x7efd64)
    #define     CF                  0x80
    #define     CR                  0x40
    #define     CCF2                0x04
    #define     CCF1                0x02
    #define     CCF0                0x01
#define     CL                      (*(unsigned char volatile far *)0x7efd65)
#define     CH                      (*(unsigned char volatile far *)0x7efd66)
#define     CMOD                    (*(unsigned char volatile far *)0x7efd67)
    #define     CIDL                0x80
    #define     ECF                 0x01

#define     UR1TOCR                 (*(unsigned char volatile far *)0x7efd70)
#define     UR1TOSR                 (*(unsigned char volatile far *)0x7efd71)
#define     UR1TOTH                 (*(unsigned char volatile far *)0x7efd72)
#define     UR1TOTL                 (*(unsigned char volatile far *)0x7efd73)
#define     UR2TOCR                 (*(unsigned char volatile far *)0x7efd74)
#define     UR2TOSR                 (*(unsigned char volatile far *)0x7efd75)
#define     UR2TOTH                 (*(unsigned char volatile far *)0x7efd76)
#define     UR2TOTL                 (*(unsigned char volatile far *)0x7efd77)
#define     UR3TOCR                 (*(unsigned char volatile far *)0x7efd78)
#define     UR3TOSR                 (*(unsigned char volatile far *)0x7efd79)
#define     UR3TOTH                 (*(unsigned char volatile far *)0x7efd7a)
#define     UR3TOTL                 (*(unsigned char volatile far *)0x7efd7b)
#define     UR4TOCR                 (*(unsigned char volatile far *)0x7efd7c)
#define     UR4TOSR                 (*(unsigned char volatile far *)0x7efd7d)
#define     UR4TOTH                 (*(unsigned char volatile far *)0x7efd7e)
#define     UR4TOTL                 (*(unsigned char volatile far *)0x7efd7f)
#define     SPITOCR                 (*(unsigned char volatile far *)0x7efd80)
#define     SPITOSR                 (*(unsigned char volatile far *)0x7efd81)
#define     SPITOTH                 (*(unsigned char volatile far *)0x7efd82)
#define     SPITOTL                 (*(unsigned char volatile far *)0x7efd83)
#define     I2CTOCR                 (*(unsigned char volatile far *)0x7efd84)
#define     I2CTOSR                 (*(unsigned char volatile far *)0x7efd85)
#define     I2CTOTH                 (*(unsigned char volatile far *)0x7efd86)
#define     I2CTOTL                 (*(unsigned char volatile far *)0x7efd87)

#define     UR1TOTE                 (*(unsigned char volatile far *)0x7efd88)
#define     UR2TOTE                 (*(unsigned char volatile far *)0x7efd89)
#define     UR3TOTE                 (*(unsigned char volatile far *)0x7efd8a)
#define     UR4TOTE                 (*(unsigned char volatile far *)0x7efd8b)
#define     SPITOTE                 (*(unsigned char volatile far *)0x7efd8c)
#define     I2CTOTE                 (*(unsigned char volatile far *)0x7efd8d)

#define     I2SCR                   (*(unsigned char volatile far *)0x7efd98)
#define     I2SSR                   (*(unsigned char volatile far *)0x7efd99)
#define     I2SDRH                  (*(unsigned char volatile far *)0x7efd9a)
#define     I2SDRL                  (*(unsigned char volatile far *)0x7efd9b)
#define     I2SPRH                  (*(unsigned char volatile far *)0x7efd9c)
#define     I2SPRL                  (*(unsigned char volatile far *)0x7efd9d)
#define     I2SCFGH                 (*(unsigned char volatile far *)0x7efd9e)
#define     I2SCFGL                 (*(unsigned char volatile far *)0x7efd9f)
#define     I2SMD                   (*(unsigned char volatile far *)0x7efda0)
#define     I2SMCKDIV               (*(unsigned char volatile far *)0x7efda1)

#define     CRECR                   (*(unsigned char volatile far *)0x7efda8)
#define     CRECNTH                 (*(unsigned char volatile far *)0x7efda9)
#define     CRECNTL                 (*(unsigned char volatile far *)0x7efdaa)
#define     CRERES                  (*(unsigned char volatile far *)0x7efdab)

#define     S2CFG                   (*(unsigned char volatile far *)0x7efdb4)
#define     S2ADDR                  (*(unsigned char volatile far *)0x7efdb5)
#define     S2ADEN                  (*(unsigned char volatile far *)0x7efdb6)
#define     USARTCR1                (*(unsigned char volatile far *)0x7efdc0)
#define     USARTCR2                (*(unsigned char volatile far *)0x7efdc1)
#define     USARTCR3                (*(unsigned char volatile far *)0x7efdc2)
#define     USARTCR4                (*(unsigned char volatile far *)0x7efdc3)
#define     USARTCR5                (*(unsigned char volatile far *)0x7efdc4)
#define     USARTGTR                (*(unsigned char volatile far *)0x7efdc5)
#define     USARTBRH                (*(unsigned char volatile far *)0x7efdc6)
#define     USARTBRL                (*(unsigned char volatile far *)0x7efdc7)
#define     USART2CR1               (*(unsigned char volatile far *)0x7efdc8)
#define     USART2CR2               (*(unsigned char volatile far *)0x7efdc9)
#define     USART2CR3               (*(unsigned char volatile far *)0x7efdca)
#define     USART2CR4               (*(unsigned char volatile far *)0x7efdcb)
#define     USART2CR5               (*(unsigned char volatile far *)0x7efdcc)
#define     USART2GTR               (*(unsigned char volatile far *)0x7efdcd)
#define     USART2BRH               (*(unsigned char volatile far *)0x7efdce)
#define     USART2BRL               (*(unsigned char volatile far *)0x7efdcf)

#define     CHIPID                  ( (unsigned char volatile far *)0x7efde0)

#define     CHIPID0                 (*(unsigned char volatile far *)0x7efde0)
#define     CHIPID1                 (*(unsigned char volatile far *)0x7efde1)
#define     CHIPID2                 (*(unsigned char volatile far *)0x7efde2)
#define     CHIPID3                 (*(unsigned char volatile far *)0x7efde3)
#define     CHIPID4                 (*(unsigned char volatile far *)0x7efde4)
#define     CHIPID5                 (*(unsigned char volatile far *)0x7efde5)
#define     CHIPID6                 (*(unsigned char volatile far *)0x7efde6)
#define     CHIPID7                 (*(unsigned char volatile far *)0x7efde7)
#define     CHIPID8                 (*(unsigned char volatile far *)0x7efde8)
#define     CHIPID9                 (*(unsigned char volatile far *)0x7efde9)
#define     CHIPID10                (*(unsigned char volatile far *)0x7efdea)
#define     CHIPID11                (*(unsigned char volatile far *)0x7efdeb)
#define     CHIPID12                (*(unsigned char volatile far *)0x7efdec)
#define     CHIPID13                (*(unsigned char volatile far *)0x7efded)
#define     CHIPID14                (*(unsigned char volatile far *)0x7efdee)
#define     CHIPID15                (*(unsigned char volatile far *)0x7efdef)
#define     CHIPID16                (*(unsigned char volatile far *)0x7efdf0)
#define     CHIPID17                (*(unsigned char volatile far *)0x7efdf1)
#define     CHIPID18                (*(unsigned char volatile far *)0x7efdf2)
#define     CHIPID19                (*(unsigned char volatile far *)0x7efdf3)
#define     CHIPID20                (*(unsigned char volatile far *)0x7efdf4)
#define     CHIPID21                (*(unsigned char volatile far *)0x7efdf5)
#define     CHIPID22                (*(unsigned char volatile far *)0x7efdf6)
#define     CHIPID23                (*(unsigned char volatile far *)0x7efdf7)
#define     CHIPID24                (*(unsigned char volatile far *)0x7efdf8)
#define     CHIPID25                (*(unsigned char volatile far *)0x7efdf9)
#define     CHIPID26                (*(unsigned char volatile far *)0x7efdfa)
#define     CHIPID27                (*(unsigned char volatile far *)0x7efdfb)
#define     CHIPID28                (*(unsigned char volatile far *)0x7efdfc)
#define     CHIPID29                (*(unsigned char volatile far *)0x7efdfd)
#define     CHIPID30                (*(unsigned char volatile far *)0x7efdfe)
#define     CHIPID31                (*(unsigned char volatile far *)0x7efdff)

/////////////////////////////////////////////////
//7E:FC00H-7E:FCFFH
/////////////////////////////////////////////////



/////////////////////////////////////////////////
//7E:FB00H-7E:FBFFH
/////////////////////////////////////////////////

#define     CHIPIDX                 ( (unsigned char volatile far *)0x7efbd0)

#define     CHIPIDX0                (*(unsigned char volatile far *)0x7efbd0)
#define     CHIPIDX1                (*(unsigned char volatile far *)0x7efbd1)
#define     CHIPIDX2                (*(unsigned char volatile far *)0x7efbd2)
#define     CHIPIDX3                (*(unsigned char volatile far *)0x7efbd3)
#define     CHIPIDX4                (*(unsigned char volatile far *)0x7efbd4)
#define     CHIPIDX5                (*(unsigned char volatile far *)0x7efbd5)
#define     CHIPIDX6                (*(unsigned char volatile far *)0x7efbd6)
#define     CHIPIDX7                (*(unsigned char volatile far *)0x7efbd7)
#define     CHIPIDX8                (*(unsigned char volatile far *)0x7efbd8)
#define     CHIPIDX9                (*(unsigned char volatile far *)0x7efbd9)
#define     CHIPIDX10               (*(unsigned char volatile far *)0x7efbda)
#define     CHIPIDX11               (*(unsigned char volatile far *)0x7efbdb)
#define     CHIPIDX12               (*(unsigned char volatile far *)0x7efbdc)
#define     CHIPIDX13               (*(unsigned char volatile far *)0x7efbdd)
#define     CHIPIDX14               (*(unsigned char volatile far *)0x7efbde)
#define     CHIPIDX15               (*(unsigned char volatile far *)0x7efbdf)
#define     CHIPIDX16               (*(unsigned char volatile far *)0x7efbe0)
#define     CHIPIDX17               (*(unsigned char volatile far *)0x7efbe1)
#define     CHIPIDX18               (*(unsigned char volatile far *)0x7efbe2)
#define     CHIPIDX19               (*(unsigned char volatile far *)0x7efbe3)
#define     CHIPIDX20               (*(unsigned char volatile far *)0x7efbe4)
#define     CHIPIDX21               (*(unsigned char volatile far *)0x7efbe5)
#define     CHIPIDX22               (*(unsigned char volatile far *)0x7efbe6)
#define     CHIPIDX23               (*(unsigned char volatile far *)0x7efbe7)
#define     CHIPIDX24               (*(unsigned char volatile far *)0x7efbe8)
#define     CHIPIDX25               (*(unsigned char volatile far *)0x7efbe9)
#define     CHIPIDX26               (*(unsigned char volatile far *)0x7efbea)
#define     CHIPIDX27               (*(unsigned char volatile far *)0x7efbeb)
#define     CHIPIDX28               (*(unsigned char volatile far *)0x7efbec)
#define     CHIPIDX29               (*(unsigned char volatile far *)0x7efbed)
#define     CHIPIDX30               (*(unsigned char volatile far *)0x7efbee)
#define     CHIPIDX31               (*(unsigned char volatile far *)0x7efbef)

#define     HSPWMA_CFG              (*(unsigned char volatile far *)0x7efbf0)
#define     HSPWMA_ADR              (*(unsigned char volatile far *)0x7efbf1)
#define     HSPWMA_DAT              (*(unsigned char volatile far *)0x7efbf2)
#define     HSPWMA_ADRH             (*(unsigned char volatile far *)0x7efbf3)
#define     HSPWMB_CFG              (*(unsigned char volatile far *)0x7efbf4)
#define     HSPWMB_ADR              (*(unsigned char volatile far *)0x7efbf5)
#define     HSPWMB_DAT              (*(unsigned char volatile far *)0x7efbf6)
#define     HSPWMB_ADRH             (*(unsigned char volatile far *)0x7efbf7)
#define     HSSPI_CFG               (*(unsigned char volatile far *)0x7efbf8)
#define     HSSPI_CFG2              (*(unsigned char volatile far *)0x7efbf9)
#define     HSSPI_STA               (*(unsigned char volatile far *)0x7efbfa)
#define     HSSPI_PSCR              (*(unsigned char volatile far *)0x7efbfb)

/////////////////////////////////////////////////
//7E:FA00H-7E:FAFFH
/////////////////////////////////////////////////

#define     DMA_M2M_CFG             (*(unsigned char volatile far *)0x7efa00)
#define     DMA_M2M_CR              (*(unsigned char volatile far *)0x7efa01)
#define     DMA_M2M_STA             (*(unsigned char volatile far *)0x7efa02)
#define     DMA_M2M_AMT             (*(unsigned char volatile far *)0x7efa03)
#define     DMA_M2M_DONE            (*(unsigned char volatile far *)0x7efa04)
#define     DMA_M2M_TXAH            (*(unsigned char volatile far *)0x7efa05)
#define     DMA_M2M_TXAL            (*(unsigned char volatile far *)0x7efa06)
#define     DMA_M2M_RXAH            (*(unsigned char volatile far *)0x7efa07)
#define     DMA_M2M_RXAL            (*(unsigned char volatile far *)0x7efa08)

#define     DMA_ADC_CFG             (*(unsigned char volatile far *)0x7efa10)
#define     DMA_ADC_CR              (*(unsigned char volatile far *)0x7efa11)
#define     DMA_ADC_STA             (*(unsigned char volatile far *)0x7efa12)
#define     DMA_ADC_AMT             (*(unsigned char volatile far *)0x7efa13)
#define     DMA_ADC_DONE            (*(unsigned char volatile far *)0x7efa14)
#define     DMA_ADC_RXAH            (*(unsigned char volatile far *)0x7efa17)
#define     DMA_ADC_RXAL            (*(unsigned char volatile far *)0x7efa18)
#define     DMA_ADC_CFG2            (*(unsigned char volatile far *)0x7efa19)
#define     DMA_ADC_CHSW0           (*(unsigned char volatile far *)0x7efa1a)
#define     DMA_ADC_CHSW1           (*(unsigned char volatile far *)0x7efa1b)
#define     DMA_ADC_ITVH            (*(unsigned char volatile far *)0x7efa1e)
#define     DMA_ADC_ITVL            (*(unsigned char volatile far *)0x7efa1f)

#define     DMA_SPI_CFG             (*(unsigned char volatile far *)0x7efa20)
#define     DMA_SPI_CR              (*(unsigned char volatile far *)0x7efa21)
#define     DMA_SPI_STA             (*(unsigned char volatile far *)0x7efa22)
#define     DMA_SPI_AMT             (*(unsigned char volatile far *)0x7efa23)
#define     DMA_SPI_DONE            (*(unsigned char volatile far *)0x7efa24)
#define     DMA_SPI_TXAH            (*(unsigned char volatile far *)0x7efa25)
#define     DMA_SPI_TXAL            (*(unsigned char volatile far *)0x7efa26)
#define     DMA_SPI_RXAH            (*(unsigned char volatile far *)0x7efa27)
#define     DMA_SPI_RXAL            (*(unsigned char volatile far *)0x7efa28)
#define     DMA_SPI_CFG2            (*(unsigned char volatile far *)0x7efa29)
#define     DMA_SPI_ITVH            (*(unsigned char volatile far *)0x7efa2e)
#define     DMA_SPI_ITVL            (*(unsigned char volatile far *)0x7efa2f)

#define     DMA_UR1T_CFG            (*(unsigned char volatile far *)0x7efa30)
#define     DMA_UR1T_CR             (*(unsigned char volatile far *)0x7efa31)
#define     DMA_UR1T_STA            (*(unsigned char volatile far *)0x7efa32)
#define     DMA_UR1T_AMT            (*(unsigned char volatile far *)0x7efa33)
#define     DMA_UR1T_DONE           (*(unsigned char volatile far *)0x7efa34)
#define     DMA_UR1T_TXAH           (*(unsigned char volatile far *)0x7efa35)
#define     DMA_UR1T_TXAL           (*(unsigned char volatile far *)0x7efa36)
#define     DMA_UR1R_CFG            (*(unsigned char volatile far *)0x7efa38)
#define     DMA_UR1R_CR             (*(unsigned char volatile far *)0x7efa39)
#define     DMA_UR1R_STA            (*(unsigned char volatile far *)0x7efa3a)
#define     DMA_UR1R_AMT            (*(unsigned char volatile far *)0x7efa3b)
#define     DMA_UR1R_DONE           (*(unsigned char volatile far *)0x7efa3c)
#define     DMA_UR1R_RXAH           (*(unsigned char volatile far *)0x7efa3d)
#define     DMA_UR1R_RXAL           (*(unsigned char volatile far *)0x7efa3e)

#define     DMA_UR2T_CFG            (*(unsigned char volatile far *)0x7efa40)
#define     DMA_UR2T_CR             (*(unsigned char volatile far *)0x7efa41)
#define     DMA_UR2T_STA            (*(unsigned char volatile far *)0x7efa42)
#define     DMA_UR2T_AMT            (*(unsigned char volatile far *)0x7efa43)
#define     DMA_UR2T_DONE           (*(unsigned char volatile far *)0x7efa44)
#define     DMA_UR2T_TXAH           (*(unsigned char volatile far *)0x7efa45)
#define     DMA_UR2T_TXAL           (*(unsigned char volatile far *)0x7efa46)
#define     DMA_UR2R_CFG            (*(unsigned char volatile far *)0x7efa48)
#define     DMA_UR2R_CR             (*(unsigned char volatile far *)0x7efa49)
#define     DMA_UR2R_STA            (*(unsigned char volatile far *)0x7efa4a)
#define     DMA_UR2R_AMT            (*(unsigned char volatile far *)0x7efa4b)
#define     DMA_UR2R_DONE           (*(unsigned char volatile far *)0x7efa4c)
#define     DMA_UR2R_RXAH           (*(unsigned char volatile far *)0x7efa4d)
#define     DMA_UR2R_RXAL           (*(unsigned char volatile far *)0x7efa4e)

#define     DMA_UR3T_CFG            (*(unsigned char volatile far *)0x7efa50)
#define     DMA_UR3T_CR             (*(unsigned char volatile far *)0x7efa51)
#define     DMA_UR3T_STA            (*(unsigned char volatile far *)0x7efa52)
#define     DMA_UR3T_AMT            (*(unsigned char volatile far *)0x7efa53)
#define     DMA_UR3T_DONE           (*(unsigned char volatile far *)0x7efa54)
#define     DMA_UR3T_TXAH           (*(unsigned char volatile far *)0x7efa55)
#define     DMA_UR3T_TXAL           (*(unsigned char volatile far *)0x7efa56)
#define     DMA_UR3R_CFG            (*(unsigned char volatile far *)0x7efa58)
#define     DMA_UR3R_CR             (*(unsigned char volatile far *)0x7efa59)
#define     DMA_UR3R_STA            (*(unsigned char volatile far *)0x7efa5a)
#define     DMA_UR3R_AMT            (*(unsigned char volatile far *)0x7efa5b)
#define     DMA_UR3R_DONE           (*(unsigned char volatile far *)0x7efa5c)
#define     DMA_UR3R_RXAH           (*(unsigned char volatile far *)0x7efa5d)
#define     DMA_UR3R_RXAL           (*(unsigned char volatile far *)0x7efa5e)

#define     DMA_UR4T_CFG            (*(unsigned char volatile far *)0x7efa60)
#define     DMA_UR4T_CR             (*(unsigned char volatile far *)0x7efa61)
#define     DMA_UR4T_STA            (*(unsigned char volatile far *)0x7efa62)
#define     DMA_UR4T_AMT            (*(unsigned char volatile far *)0x7efa63)
#define     DMA_UR4T_DONE           (*(unsigned char volatile far *)0x7efa64)
#define     DMA_UR4T_TXAH           (*(unsigned char volatile far *)0x7efa65)
#define     DMA_UR4T_TXAL           (*(unsigned char volatile far *)0x7efa66)
#define     DMA_UR4R_CFG            (*(unsigned char volatile far *)0x7efa68)
#define     DMA_UR4R_CR             (*(unsigned char volatile far *)0x7efa69)
#define     DMA_UR4R_STA            (*(unsigned char volatile far *)0x7efa6a)
#define     DMA_UR4R_AMT            (*(unsigned char volatile far *)0x7efa6b)
#define     DMA_UR4R_DONE           (*(unsigned char volatile far *)0x7efa6c)
#define     DMA_UR4R_RXAH           (*(unsigned char volatile far *)0x7efa6d)
#define     DMA_UR4R_RXAL           (*(unsigned char volatile far *)0x7efa6e)

#define     DMA_LCM_CFG             (*(unsigned char volatile far *)0x7efa70)
#define     DMA_LCM_CR              (*(unsigned char volatile far *)0x7efa71)
#define     DMA_LCM_STA             (*(unsigned char volatile far *)0x7efa72)
#define     DMA_LCM_AMT             (*(unsigned char volatile far *)0x7efa73)
#define     DMA_LCM_DONE            (*(unsigned char volatile far *)0x7efa74)
#define     DMA_LCM_TXAH            (*(unsigned char volatile far *)0x7efa75)
#define     DMA_LCM_TXAL            (*(unsigned char volatile far *)0x7efa76)
#define     DMA_LCM_RXAH            (*(unsigned char volatile far *)0x7efa77)
#define     DMA_LCM_RXAL            (*(unsigned char volatile far *)0x7efa78)
#define     DMA_LCM_ITVH            (*(unsigned char volatile far *)0x7efa7e)
#define     DMA_LCM_ITVL            (*(unsigned char volatile far *)0x7efa7f)

#define     DMA_M2M_AMTH            (*(unsigned char volatile far *)0x7efa80)
#define     DMA_M2M_DONEH           (*(unsigned char volatile far *)0x7efa81)
#define     DMA_ADC_AMTH            (*(unsigned char volatile far *)0x7efa82)
#define     DMA_ADC_DONEH           (*(unsigned char volatile far *)0x7efa83)
#define     DMA_SPI_AMTH            (*(unsigned char volatile far *)0x7efa84)
#define     DMA_SPI_DONEH           (*(unsigned char volatile far *)0x7efa85)
#define     DMA_LCM_AMTH            (*(unsigned char volatile far *)0x7efa86)
#define     DMA_LCM_DONEH           (*(unsigned char volatile far *)0x7efa87)
#define     DMA_UR1T_AMTH           (*(unsigned char volatile far *)0x7efa88)
#define     DMA_UR1T_DONEH          (*(unsigned char volatile far *)0x7efa89)
#define     DMA_UR1R_AMTH           (*(unsigned char volatile far *)0x7efa8a)
#define     DMA_UR1R_DONEH          (*(unsigned char volatile far *)0x7efa8b)
#define     DMA_UR2T_AMTH           (*(unsigned char volatile far *)0x7efa8c)
#define     DMA_UR2T_DONEH          (*(unsigned char volatile far *)0x7efa8d)
#define     DMA_UR2R_AMTH           (*(unsigned char volatile far *)0x7efa8e)
#define     DMA_UR2R_DONEH          (*(unsigned char volatile far *)0x7efa8f)
#define     DMA_UR3T_AMTH           (*(unsigned char volatile far *)0x7efa90)
#define     DMA_UR3T_DONEH          (*(unsigned char volatile far *)0x7efa91)
#define     DMA_UR3R_AMTH           (*(unsigned char volatile far *)0x7efa92)
#define     DMA_UR3R_DONEH          (*(unsigned char volatile far *)0x7efa93)
#define     DMA_UR4T_AMTH           (*(unsigned char volatile far *)0x7efa94)
#define     DMA_UR4T_DONEH          (*(unsigned char volatile far *)0x7efa95)
#define     DMA_UR4R_AMTH           (*(unsigned char volatile far *)0x7efa96)
#define     DMA_UR4R_DONEH          (*(unsigned char volatile far *)0x7efa97)

#define     DMA_I2CT_CFG            (*(unsigned char volatile far *)0x7efa98)
#define     DMA_I2CT_CR             (*(unsigned char volatile far *)0x7efa99)
#define     DMA_I2CT_STA            (*(unsigned char volatile far *)0x7efa9a)
#define     DMA_I2CT_AMT            (*(unsigned char volatile far *)0x7efa9b)
#define     DMA_I2CT_DONE           (*(unsigned char volatile far *)0x7efa9c)
#define     DMA_I2CT_TXAH           (*(unsigned char volatile far *)0x7efa9d)
#define     DMA_I2CT_TXAL           (*(unsigned char volatile far *)0x7efa9e)
#define     DMA_I2CR_CFG            (*(unsigned char volatile far *)0x7efaa0)
#define     DMA_I2CR_CR             (*(unsigned char volatile far *)0x7efaa1)
#define     DMA_I2CR_STA            (*(unsigned char volatile far *)0x7efaa2)
#define     DMA_I2CR_AMT            (*(unsigned char volatile far *)0x7efaa3)
#define     DMA_I2CR_DONE           (*(unsigned char volatile far *)0x7efaa4)
#define     DMA_I2CR_RXAH           (*(unsigned char volatile far *)0x7efaa5)
#define     DMA_I2CR_RXAL           (*(unsigned char volatile far *)0x7efaa6)

#define     DMA_I2CT_AMTH           (*(unsigned char volatile far *)0x7efaa8)
#define     DMA_I2CT_DONEH          (*(unsigned char volatile far *)0x7efaa9)
#define     DMA_I2CR_AMTH           (*(unsigned char volatile far *)0x7efaaa)
#define     DMA_I2CR_DONEH          (*(unsigned char volatile far *)0x7efaab)
#define     DMA_I2C_CR              (*(unsigned char volatile far *)0x7efaad)
#define     DMA_I2C_ST1             (*(unsigned char volatile far *)0x7efaae)
#define     DMA_I2C_ST2             (*(unsigned char volatile far *)0x7efaaf)

#define     DMA_I2ST_CFG            (*(unsigned char volatile far *)0x7efab0)
#define     DMA_I2ST_CR             (*(unsigned char volatile far *)0x7efab1)
#define     DMA_I2ST_STA            (*(unsigned char volatile far *)0x7efab2)
#define     DMA_I2ST_AMT            (*(unsigned char volatile far *)0x7efab3)
#define     DMA_I2ST_DONE           (*(unsigned char volatile far *)0x7efab4)
#define     DMA_I2ST_TXAH           (*(unsigned char volatile far *)0x7efab5)
#define     DMA_I2ST_TXAL           (*(unsigned char volatile far *)0x7efab6)
#define     DMA_I2SR_CFG            (*(unsigned char volatile far *)0x7efab8)
#define     DMA_I2SR_CR             (*(unsigned char volatile far *)0x7efab9)
#define     DMA_I2SR_STA            (*(unsigned char volatile far *)0x7efaba)
#define     DMA_I2SR_AMT            (*(unsigned char volatile far *)0x7efabb)
#define     DMA_I2SR_DONE           (*(unsigned char volatile far *)0x7efabc)
#define     DMA_I2SR_RXAH           (*(unsigned char volatile far *)0x7efabd)
#define     DMA_I2SR_RXAL           (*(unsigned char volatile far *)0x7efabe)

#define     DMA_I2ST_AMTH           (*(unsigned char volatile far *)0x7efac0)
#define     DMA_I2ST_DONEH          (*(unsigned char volatile far *)0x7efac1)
#define     DMA_I2SR_AMTH           (*(unsigned char volatile far *)0x7efac2)
#define     DMA_I2SR_DONEH          (*(unsigned char volatile far *)0x7efac3)
#define     DMA_I2C_ITVH            (*(unsigned char volatile far *)0x7efac4)
#define     DMA_I2C_ITVL            (*(unsigned char volatile far *)0x7efac5)
#define     DMA_I2S_ITVH            (*(unsigned char volatile far *)0x7efac6)
#define     DMA_I2S_ITVL            (*(unsigned char volatile far *)0x7efac7)
#define     DMA_UR1_ITVH            (*(unsigned char volatile far *)0x7efac8)
#define     DMA_UR1_ITVL            (*(unsigned char volatile far *)0x7efac9)
#define     DMA_UR2_ITVH            (*(unsigned char volatile far *)0x7efaca)
#define     DMA_UR2_ITVL            (*(unsigned char volatile far *)0x7efacb)
#define     DMA_UR3_ITVH            (*(unsigned char volatile far *)0x7efacc)
#define     DMA_UR3_ITVL            (*(unsigned char volatile far *)0x7efacd)
#define     DMA_UR4_ITVH            (*(unsigned char volatile far *)0x7eface)
#define     DMA_UR4_ITVL            (*(unsigned char volatile far *)0x7efacf)

#define     DMA_QSPI_CFG            (*(unsigned char volatile far *)0x7efad0)
#define     DMA_QSPI_CR             (*(unsigned char volatile far *)0x7efad1)
#define     DMA_QSPI_STA            (*(unsigned char volatile far *)0x7efad2)
#define     DMA_QSPI_AMT            (*(unsigned char volatile far *)0x7efad3)
#define     DMA_QSPI_DONE           (*(unsigned char volatile far *)0x7efad4)
#define     DMA_QSPI_TXAH           (*(unsigned char volatile far *)0x7efad5)
#define     DMA_QSPI_TXAL           (*(unsigned char volatile far *)0x7efad6)
#define     DMA_QSPI_RXAH           (*(unsigned char volatile far *)0x7efad7)
#define     DMA_QSPI_RXAL           (*(unsigned char volatile far *)0x7efad8)
#define     DMA_QSPI_AMTH           (*(unsigned char volatile far *)0x7efadb)
#define     DMA_QSPI_DONEH          (*(unsigned char volatile far *)0x7efadc)
#define     DMA_QSPI_ITVH           (*(unsigned char volatile far *)0x7efade)
#define     DMA_QSPI_ITVL           (*(unsigned char volatile far *)0x7efadf)

#define     DMA_P2P_CR1             (*(unsigned char volatile far *)0x7efaf0)
#define     DMA_P2P_CR2             (*(unsigned char volatile far *)0x7efaf1)
#define     DMA_ARB_CFG             (*(unsigned char volatile far *)0x7efaf8)
#define     DMA_ARB_STA             (*(unsigned char volatile far *)0x7efaf9)

/////////////////////////////////////////////////
//7E:F900H-7E:F9FFH
/////////////////////////////////////////////////

#define     QSPI_CR1                (*(unsigned char volatile far *)0x7ef900)
#define     QSPI_CR2                (*(unsigned char volatile far *)0x7ef901)
#define     QSPI_CR3                (*(unsigned char volatile far *)0x7ef902)
#define     QSPI_CR4                (*(unsigned char volatile far *)0x7ef903)
#define     QSPI_DCR1               (*(unsigned char volatile far *)0x7ef904)
#define     QSPI_DCR2               (*(unsigned char volatile far *)0x7ef905)
#define     QSPI_SR1                (*(unsigned char volatile far *)0x7ef906)
#define     QSPI_SR2                (*(unsigned char volatile far *)0x7ef907)
#define     QSPI_FCR                (*(unsigned char volatile far *)0x7ef908)
#define     QSPI_HCR1               (*(unsigned char volatile far *)0x7ef909)
#define     QSPI_HCR2               (*(unsigned char volatile far *)0x7ef90a)
#define     QSPI_DLR1               (*(unsigned char volatile far *)0x7ef910)
#define     QSPI_DLR2               (*(unsigned char volatile far *)0x7ef911)
#define     QSPI_CCR1               (*(unsigned char volatile far *)0x7ef914)
#define     QSPI_CCR2               (*(unsigned char volatile far *)0x7ef915)
#define     QSPI_CCR3               (*(unsigned char volatile far *)0x7ef916)
#define     QSPI_CCR4               (*(unsigned char volatile far *)0x7ef917)
#define     QSPI_AR1                (*(unsigned char volatile far *)0x7ef918)
#define     QSPI_AR2                (*(unsigned char volatile far *)0x7ef919)
#define     QSPI_AR3                (*(unsigned char volatile far *)0x7ef91a)
#define     QSPI_AR4                (*(unsigned char volatile far *)0x7ef91b)
#define     QSPI_ABR                (*(unsigned char volatile far *)0x7ef91c)
#define     QSPI_DR                 (*(unsigned char volatile far *)0x7ef920)
#define     QSPI_PSMKR1             (*(unsigned char volatile far *)0x7ef924)
#define     QSPI_PSMAR1             (*(unsigned char volatile far *)0x7ef928)
#define     QSPI_PIR1               (*(unsigned char volatile far *)0x7ef92c)
#define     QSPI_PIR2               (*(unsigned char volatile far *)0x7ef92d)

#define     PWMA_ENO2               (*(unsigned char volatile far *)0x7ef930)
#define     PWMA_IOAUX2             (*(unsigned char volatile far *)0x7ef931)
#define     PWMA_CR3                (*(unsigned char volatile far *)0x7ef932)
#define     PWMA_SR3                (*(unsigned char volatile far *)0x7ef933)
#define     PWMA_CCER3              (*(unsigned char volatile far *)0x7ef934)
#define     PWMA_CCMR1X             (*(unsigned char volatile far *)0x7ef938)
#define     PWMA_CCMR2X             (*(unsigned char volatile far *)0x7ef939)
#define     PWMA_CCMR3X             (*(unsigned char volatile far *)0x7ef93a)
#define     PWMA_CCMR4X             (*(unsigned char volatile far *)0x7ef93b)
#define     PWMA_CCMR5              (*(unsigned char volatile far *)0x7ef93c)
#define     PWMA_CCMR5X             (*(unsigned char volatile far *)0x7ef93d)
#define     PWMA_CCMR6              (*(unsigned char volatile far *)0x7ef93e)
#define     PWMA_CCMR6X             (*(unsigned char volatile far *)0x7ef93f)
#define     PWMA_CCR5H              (*(unsigned char volatile far *)0x7ef940)
#define     PWMA_CCR5L              (*(unsigned char volatile far *)0x7ef941)
#define     PWMA_CCR5X              (*(unsigned char volatile far *)0x7ef942)
#define     PWMA_CCR6H              (*(unsigned char volatile far *)0x7ef943)
#define     PWMA_CCR6L              (*(unsigned char volatile far *)0x7ef944)
#define     PWMA_DER                (*(unsigned char volatile far *)0x7ef948)
#define     PWMA_DBA                (*(unsigned char volatile far *)0x7ef949)
#define     PWMA_DBL                (*(unsigned char volatile far *)0x7ef94a)
#define     PWMA_DMACR              (*(unsigned char volatile far *)0x7ef94b)

#define     DMA_PWMAT_CFG           (*(unsigned char volatile far *)0x7ef980)
#define     DMA_PWMAT_CR            (*(unsigned char volatile far *)0x7ef981)
#define     DMA_PWMAT_STA           (*(unsigned char volatile far *)0x7ef982)
#define     DMA_PWMAT_AMTH          (*(unsigned char volatile far *)0x7ef984)
#define     DMA_PWMAT_AMT           (*(unsigned char volatile far *)0x7ef985)
#define     DMA_PWMAT_DONEH         (*(unsigned char volatile far *)0x7ef986)
#define     DMA_PWMAT_DONE          (*(unsigned char volatile far *)0x7ef987)
#define     DMA_PWMAT_TXAH          (*(unsigned char volatile far *)0x7ef988)
#define     DMA_PWMAT_TXAL          (*(unsigned char volatile far *)0x7ef989)
#define     DMA_PWMA_ITVH           (*(unsigned char volatile far *)0x7ef98e)
#define     DMA_PWMA_ITVL           (*(unsigned char volatile far *)0x7ef98f)

#define     DMA_PWMAR_CFG           (*(unsigned char volatile far *)0x7ef990)
#define     DMA_PWMAR_CR            (*(unsigned char volatile far *)0x7ef991)
#define     DMA_PWMAR_STA           (*(unsigned char volatile far *)0x7ef992)
#define     DMA_PWMAR_AMTH          (*(unsigned char volatile far *)0x7ef994)
#define     DMA_PWMAR_AMT           (*(unsigned char volatile far *)0x7ef995)
#define     DMA_PWMAR_DONEH         (*(unsigned char volatile far *)0x7ef996)
#define     DMA_PWMAR_DONE          (*(unsigned char volatile far *)0x7ef997)
#define     DMA_PWMAR_RXAH          (*(unsigned char volatile far *)0x7ef998)
#define     DMA_PWMAR_RXAL          (*(unsigned char volatile far *)0x7ef999)

/////////////////////////////////////////////////
//USB Control Regiter
/////////////////////////////////////////////////

#define     USBBASE                 0
#define     FADDR                   (USBBASE + 0)
#define     UPDATE                  0x80
#define     POWER                   (USBBASE + 1)
#define     ISOUD                   0x80
#define     USBRST                  0x08
#define     USBRSU                  0x04
#define     USBSUS                  0x02
#define     ENSUS                   0x01
#define     INTRIN1                 (USBBASE + 2)
#define     EP5INIF                 0x20
#define     EP4INIF                 0x10
#define     EP3INIF                 0x08
#define     EP2INIF                 0x04
#define     EP1INIF                 0x02
#define     EP0IF                   0x01
#define     INTROUT1                (USBBASE + 4)
#define     EP5OUTIF                0x20
#define     EP4OUTIF                0x10
#define     EP3OUTIF                0x08
#define     EP2OUTIF                0x04
#define     EP1OUTIF                0x02
#define     INTRUSB                 (USBBASE + 6)
#define     SOFIF                   0x08
#define     RSTIF                   0x04
#define     RSUIF                   0x02
#define     SUSIF                   0x01
#define     INTRIN1E                (USBBASE + 7)
#define     EP5INIE                 0x20
#define     EP4INIE                 0x10
#define     EP3INIE                 0x08
#define     EP2INIE                 0x04
#define     EP1INIE                 0x02
#define     EP0IE                   0x01
#define     INTROUT1E               (USBBASE + 9)
#define     EP5OUTIE                0x20
#define     EP4OUTIE                0x10
#define     EP3OUTIE                0x08
#define     EP2OUTIE                0x04
#define     EP1OUTIE                0x02
#define     INTRUSBE                (USBBASE + 11)
#define     SOFIE                   0x08
#define     RSTIE                   0x04
#define     RSUIE                   0x02
#define     SUSIE                   0x01
#define     FRAME1                  (USBBASE + 12)
#define     FRAME2                  (USBBASE + 13)
#define     INDEX                   (USBBASE + 14)
#define     INMAXP                  (USBBASE + 16)
#define     CSR0                    (USBBASE + 17)
#define     SSUEND                  0x80
#define     SOPRDY                  0x40
#define     SDSTL                   0x20
#define     SUEND                   0x10
#define     DATEND                  0x08
#define     STSTL                   0x04
#define     IPRDY                   0x02
#define     OPRDY                   0x01
#define     INCSR1                  (USBBASE + 17)
#define     INCLRDT                 0x40
#define     INSTSTL                 0x20
#define     INSDSTL                 0x10
#define     INFLUSH                 0x08
#define     INUNDRUN                0x04
#define     INFIFONE                0x02
#define     INIPRDY                 0x01
#define     INCSR2                  (USBBASE + 18)
#define     INAUTOSET               0x80
#define     INISO                   0x40
#define     INMODEIN                0x20
#define     INMODEOUT               0x00
#define     INENDMA                 0x10
#define     INFCDT                  0x08
#define     OUTMAXP                 (USBBASE + 19)
#define     OUTCSR1                 (USBBASE + 20)
#define     OUTCLRDT                0x80
#define     OUTSTSTL                0x40
#define     OUTSDSTL                0x20
#define     OUTFLUSH                0x10
#define     OUTDATERR               0x08
#define     OUTOVRRUN               0x04
#define     OUTFIFOFUL              0x02
#define     OUTOPRDY                0x01
#define     OUTCSR2                 (USBBASE + 21)
#define     OUTAUTOCLR              0x80
#define     OUTISO                  0x40
#define     OUTENDMA                0x20
#define     OUTDMAMD                0x10
#define     COUNT0                  (USBBASE + 22)
#define     OUTCOUNT1               (USBBASE + 22)
#define     OUTCOUNT2               (USBBASE + 23)
#define     FIFO0                   (USBBASE + 32)
#define     FIFO1                   (USBBASE + 33)
#define     FIFO2                   (USBBASE + 34)
#define     FIFO3                   (USBBASE + 35)
#define     FIFO4                   (USBBASE + 36)
#define     FIFO5                   (USBBASE + 37)
#define     UTRKCTL                 (USBBASE + 48)
#define     UTRKSTS                 (USBBASE + 49)

/////////////////////////////////////////////////
//Interrupt Vector
/////////////////////////////////////////////////

#define     INT0_VECTOR             0       //0003H
#define     TMR0_VECTOR             1       //000BH
#define     INT1_VECTOR             2       //0013H
#define     TMR1_VECTOR             3       //001BH
#define     UART1_VECTOR            4       //0023H
#define     ADC_VECTOR              5       //002BH
#define     LVD_VECTOR              6       //0033H
#define     PCA_VECTOR              7       //003BH
#define     UART2_VECTOR            8       //0043H
#define     SPI_VECTOR              9       //004BH
#define     INT2_VECTOR             10      //0053H
#define     INT3_VECTOR             11      //005BH
#define     TMR2_VECTOR             12      //0063H
#define     USER_VECTOR             13      //006BH
#define     INT4_VECTOR             16      //0083H
#define     UART3_VECTOR            17      //008BH
#define     UART4_VECTOR            18      //0093H
#define     TMR3_VECTOR             19      //009BH
#define     TMR4_VECTOR             20      //00A3H
#define     CMP_VECTOR              21      //00ABH
#define     I2C_VECTOR              24      //00C3H
#define     USB_VECTOR              25      //00CBH
#define     PWMA_VECTOR             26      //00D3H
#define     PWMB_VECTOR             27      //00DBH

#define     RTC_VECTOR              36      //0123H
#define     P0INT_VECTOR            37      //012BH
#define     P1INT_VECTOR            38      //0133H
#define     P2INT_VECTOR            39      //013BH
#define     P3INT_VECTOR            40      //0143H
#define     P4INT_VECTOR            41      //014BH
#define     P5INT_VECTOR            42      //0153H
#define     P6INT_VECTOR            43      //015BH
#define     P7INT_VECTOR            44      //0163H
#define     DMA_M2M_VECTOR          47      //017BH
#define     DMA_ADC_VECTOR          48      //0183H
#define     DMA_SPI_VECTOR          49      //018BH
#define     DMA_UR1T_VECTOR         50      //0193H
#define     DMA_UR1R_VECTOR         51      //019BH
#define     DMA_UR2T_VECTOR         52      //01A3H
#define     DMA_UR2R_VECTOR         53      //01ABH
#define     DMA_UR3T_VECTOR         54      //01B3H
#define     DMA_UR3R_VECTOR         55      //01BBH
#define     DMA_UR4T_VECTOR         56      //01C3H
#define     DMA_UR4R_VECTOR         57      //01CBH
#define     DMA_LCM_VECTOR          58      //01D3H
#define     LCM_VECTOR              59      //01DBH
#define     DMA_I2CT_VECTOR         60      //01E3H
#define     DMA_I2CR_VECTOR         61      //01EBH
#define     I2S_VECTOR              62      //01F3H
#define     DMA_I2ST_VECTOR         63      //01FBH
#define     DMA_I2SR_VECTOR         64      //0203H
#define     DMA_QSPI_VECTOR         65      //020BH
#define     QSPI_VECTOR             66      //0213H
#define     TMR11_VECTOR            67      //021BH
#define     DMA_PWMAT_VECTOR        72      //0243H
#define     DMA_PWMAR_VECTOR        73      //024BH

/////////////////////////////////////////////////

#define        EAXSFR()                EAXFR = 1                /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展SFR(XSFR) */
#define        EAXRAM()                EAXFR = 0                /* MOVX A,@DPTR/MOVX @DPTR,A指令的操作对象为扩展RAM(XRAM) */

/////////////////////////////////////////////////
#define NOP1()  _nop_()
#define NOP2()  NOP1(),NOP1()
#define NOP3()  NOP2(),NOP1()
#define NOP4()  NOP3(),NOP1()
#define NOP5()  NOP4(),NOP1()
#define NOP6()  NOP5(),NOP1()
#define NOP7()  NOP6(),NOP1()
#define NOP8()  NOP7(),NOP1()
#define NOP9()  NOP8(),NOP1()
#define NOP10() NOP9(),NOP1()
#define NOP11() NOP10(),NOP1()
#define NOP12() NOP11(),NOP1()
#define NOP13() NOP12(),NOP1()
#define NOP14() NOP13(),NOP1()
#define NOP15() NOP14(),NOP1()
#define NOP16() NOP15(),NOP1()
#define NOP17() NOP16(),NOP1()
#define NOP18() NOP17(),NOP1()
#define NOP19() NOP18(),NOP1()
#define NOP20() NOP19(),NOP1()
#define NOP21() NOP20(),NOP1()
#define NOP22() NOP21(),NOP1()
#define NOP23() NOP22(),NOP1()
#define NOP24() NOP23(),NOP1()
#define NOP25() NOP24(),NOP1()
#define NOP26() NOP25(),NOP1()
#define NOP27() NOP26(),NOP1()
#define NOP28() NOP27(),NOP1()
#define NOP29() NOP28(),NOP1()
#define NOP30() NOP29(),NOP1()
#define NOP31() NOP30(),NOP1()
#define NOP32() NOP31(),NOP1()
#define NOP33() NOP32(),NOP1()
#define NOP34() NOP33(),NOP1()
#define NOP35() NOP34(),NOP1()
#define NOP36() NOP35(),NOP1()
#define NOP37() NOP36(),NOP1()
#define NOP38() NOP37(),NOP1()
#define NOP39() NOP38(),NOP1()
#define NOP40() NOP39(),NOP1()
#define NOP(N)  NOP##N()


/////////////////////////////////////////////////


#endif


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-16 09:00:20 | 显示全部楼层
#ifndef __AI_USB_H__
#define __AI_USB_H__

#include "def.h"

//使用串口“printf”打印信息需屏蔽以下两个定义
//#define PRINTF_SEGLED         //printf输出重定向到ISP下载软件中的7段数码管
//#define PRINTF_HID            //printf输出直接重定向到USB口
//#define PRINTF_USB            //printf输出直接重定向到USB口

#define DEVSTATE_ATTACHED       0
#define DEVSTATE_POWERED        1
#define DEVSTATE_DEFAULT        2
#define DEVSTATE_ADDRESS        3
#define DEVSTATE_CONFIGURED     4
#define DEVSTATE_SUSPENDED      5

void usb_init();
void usb_OUT_done();
void USB_SendData(BYTE *dat, int size);

void set_usb_OUT_callback(void (*pfn)(void));   //如果需要实现USB接收中断,需要调用此函数来设置回调函数
void set_usb_IN_callback(void (*pfn)(void));    //如果需要实现USB发送中断,需要调用此函数来设置回调函数
void set_usb_ispcmd(char *cmd);                 //设置不停电下载的用户自定义命令,不设置时默认下载命令为“@STCISP#”

int SEG7_ShowString(const char *fmt, ...);
void SEG7_ShowLong(long n, char radix);
void SEG7_ShowFloat(float f);
void SEG7_ShowCode(BYTE *cod);

void LED40_SendData(BYTE *dat, BYTE size);
void LED40_SetPort(BYTE port, BYTE dat);
void LED40_SetBit(BYTE port, BYTE bt);
void LED40_ClrBit(BYTE port, BYTE bt);

void LED64_SendData(BYTE *dat, BYTE size);
void LED64_SetPort(BYTE port, BYTE dat);
void LED64_SetBit(BYTE port, BYTE bt);
void LED64_ClrBit(BYTE port, BYTE bt);

void LCD12864_DisplayOff();
void LCD12864_DisplayOn();
void LCD12864_CursorOff();
void LCD12864_CursorOn();
void LCD12864_CursorMoveLeft();
void LCD12864_CursorMoveRight();
void LCD12864_CursorReturnHome();
void LCD12864_ScrollLeft();
void LCD12864_ScrollRight();
void LCD12864_ScrollUp(BYTE line);
void LCD12864_AutoWrapOff();
void LCD12864_AutoWrapOn();
void LCD12864_ReverseLine(BYTE line);
void LCD12864_DisplayClear();
void LCD12864_ShowString(BYTE x, BYTE y, char *str);
void LCD12864_ShowPicture(BYTE x, BYTE y, BYTE cx, BYTE cy, BYTE *dat);

void OLED12864_DisplayOff();
void OLED12864_DisplayOn();
void OLED12864_DisplayContent();
void OLED12864_DisplayEntire();
void OLED12864_HorizontalMirror();
void OLED12864_VerticalMirror();
void OLED12864_DisplayReverse();
void OLED12864_SetContrast(BYTE bContrast);
void OLED12864_SetAddressMode(BYTE bMode);
void OLED12864_ScrollLeft(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
void OLED12864_ScrollRight(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
void OLED12864_ScrollUp(BYTE bPageStart, BYTE bPageEnd, WORD nInterval);
void OLED12864_ScrollStart();
void OLED12864_ScrollStop();
void OLED12864_ShowPicture(BYTE x, BYTE y, BYTE cx, BYTE cy, BYTE *dat);

int printf_usb (const char *fmt, ...);

#if defined PRINTF_SEGLED
#define printf  SEG7_ShowString
#elif defined PRINTF_USB
#define printf  printf_usb
#elif defined  PRINTF_HID
#define printf  printf_usb
#endif

extern BYTE xdata UsbFeatureBuffer[64];
extern BYTE xdata UsbInBuffer[64];
extern BYTE xdata UsbOutBuffer[64];
extern BOOL bUsbFeatureReady;
extern BOOL bUsbInBusy;
extern BOOL bUsbOutReady;
extern BYTE DeviceState;
extern BYTE OutNumber;

#endif


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15609
发表于 2025-4-16 09:00:49 | 显示全部楼层
#ifndef __DEF_H__
#define __DEF_H__

/////////////////////////////////////////////////

typedef bit                     BOOL;

typedef unsigned char           BYTE;
typedef unsigned int            WORD;
typedef unsigned long           DWORD;

typedef signed   char           CHAR;
typedef signed   int            INT;
typedef signed   long           LONG;

typedef unsigned char           uint8_t;
typedef unsigned int            uint16_t;
typedef unsigned long           uint32_t;

typedef signed   char           int8_t;
typedef signed   int            int16_t;
typedef signed   long           int32_t;

typedef unsigned char           uint8;
typedef unsigned int            uint16;
typedef unsigned long           uint32;

typedef signed   char           int8;
typedef signed   int            int16;
typedef signed   long           int32;

typedef unsigned char           u8;
typedef unsigned int            u16;
typedef unsigned long           u32;

typedef signed   char           s8;
typedef signed   int            s16;
typedef signed   long           s32;

/////////////////////////////////////////////////

#ifndef NULL
#define NULL                    0
#endif

#ifndef LOW
#define LOW                     0
#endif

#ifndef HIGH
#define HIGH                    1
#endif

#ifndef FALSE
#define FALSE                   0
#endif

#ifndef TRUE
#define TRUE                    1
#endif

#ifndef DISABLE
#define DISABLE                 0
#endif

#ifndef ENABLE
#define ENABLE                  1
#endif

/////////////////////////////////////////////////

#ifndef min
#define min(a, b)               ((a) < (b) ? (a) : (b))
#endif

#ifndef max
#define max(a, b)               ((a) > (b) ? (a) : (b))

#endif

#ifndef LOBYTE
#define LOBYTE(n)               ((BYTE)(n))
#endif

#ifndef HIBYTE
#define HIBYTE(n)               ((BYTE)(((WORD)(n) >> 8) & 0xff))
#endif

#ifndef LOWORD
#define LOWORD(n)               ((WORD)(n))
#endif

#ifndef HIWORD
#define HIWORD(n)               ((WORD)(((DWORD)(n) >> 16) & 0xffff))
#endif

#ifndef MAKEWORD
#define MAKEWORD(l, h)          ((WORD)(((BYTE)(l)) | ((WORD)((BYTE)(h))) << 8))
#endif

#ifndef MAKELONG
#define MAKELONG(l, h)          ((DWORD)(((WORD)(l)) | ((DWORD)((WORD)(h))) << 16))
#endif

#ifndef BYTE0
#define BYTE0(n)                LOBYTE(n)
#endif

#ifndef BYTE1
#define BYTE1(n)                HIBYTE(n)
#endif

#ifndef BYTE2
#define BYTE2(n)                LOBYTE(HIWORD(n))
#endif

#ifndef BYTE3
#define BYTE3(n)                HIBYTE(HIWORD(n))
#endif

#ifndef WORD0
#define WORD0(n)                LOWORD(n)
#endif

#ifndef WORD2
#define WORD2(n)                HIWORD(n)
#endif

/////////////////////////////////////////////////

#define BIT0                    0x01
#define BIT1                    0x02
#define BIT2                    0x04
#define BIT3                    0x08
#define BIT4                    0x10
#define BIT5                    0x20
#define BIT6                    0x40
#define BIT7                    0x80
#define BIT(b)                  (BIT##b)

#define BIT_LN                  0x0f
#define BIT_HN                  0xf0
#define BIT_ALL                 0xff

#define CLR_REG_BIT(r, b)       ((r) &= ~(b))
#define SET_REG_BIT(r, b)       ((r) |= (b))
#define CPL_REG_BIT(r, b)       ((r) ^= (b))
#define READ_REG_BIT(r, b)      ((r) & (b))

#define READ_REG(r)             (r)
#define WRITE_REG(r, v)         ((r) = (v))
#define CLR_REG(r)              ((r) = 0)
#define MODIFY_REG(r, clr, set) ((r) = (((r) & ~(clr)) | ((set) & (clr))))

/////////////////////////////////////////////////

#endif


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-04-30 09:01:34

1

主题

66

回帖

682

积分

高级会员

积分
682
发表于 2025-4-16 09:01:29 | 显示全部楼层

使用【AiCube】助手创建:查询方式,查询到电脑命令后,printf_usb("HelloWorld !\r\n")或其他
截图202504160900238290.jpg

CDC2(printf_usb)(AiCube).zip

137.51 KB, 下载次数: 5

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:42
  • 最近打卡:2025-04-30 09:01:34

1

主题

66

回帖

682

积分

高级会员

积分
682
发表于 2025-4-16 09:03:16 | 显示全部楼层
使用【AiCube】助手创建:
中断方式,单片机USB中断接收服务函数收到命令后,
printf_usb("HelloWorld !\r\n")或其他

截图202504160902528454.jpg


CDC3(printf_usb)(AiCube).zip

137.46 KB, 下载次数: 2

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民II
  • 打卡总天数:95
  • 最近打卡:2025-05-01 09:02:58
已绑定手机

5

主题

66

回帖

228

积分

中级会员

积分
228
发表于 2025-4-20 17:26:13 | 显示全部楼层
超级实用
学习
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-1 17:59 , Processed in 0.134477 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表