搜索
bottom↓
回复: 20

上传几个关于MSP430的宏定义,可以基本实现位操作,仅支持IAR。

[复制链接]

出0入0汤圆

发表于 2011-2-23 10:33:45 | 显示全部楼层 |阅读模式
/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : clock.h
* Author             : Wind snow Li.
* Version            : V1.0
* Date               : 2011-1-13
* Description        : The header file contains some clock macroinstruction.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __CLOCK__H__
#define __CLOCK__H__

/* Includes ------------------------------------------------------------------*/
#include "data_typedef.h"

/* The following header files related to specific hardware MCU -------------- */

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/
/* 定义时钟的频率, 确定此项目中, MCLK的频率. */
#define SYSTEM_CLOCK    8000000

/* Flash模块操作频率 */
#define FLASH_FREQ      ( (u8)((( f32 )SYSTEM_CLOCK ) /350000 + 0.5 ) & 0x3F )

/* 利用本征函数来定义软件延时, 会降低移植性, 但是时间很准确, 且非常简单 */
/*延时uS*/
#define DELAY_uS(x)     __delay_cycles((u32)((f32)SYSTEM_CLOCK / 1000000 * (x)))
/*延时mS*/
#define DELAY_mS(x)     __delay_cycles((u32)((f32)SYSTEM_CLOCK / 1000 * (x)))
/*延时S*/
#define DELAY_S(x)      __delay_cycles((u32)((f32)SYSTEM_CLOCK * (x)))

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __CLOCK__H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/










/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : data_typedef.h
* Author             : Wind snow Li.
* Version            : V1.0
* Date               : 2011-1-12 09:28
* Description        : This file contains all the common data types.
********************************************************************************
*
* This file contains all the common data types.
* Try to use these to redefine the type, in order to make all the files style
* tends the unification.
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __DATA__TYPE__DEF__H__
#define __DATA__TYPE__DEF__H__

/* Includes ------------------------------------------------------------------*/

/* Exported types ------------------------------------------------------------*/
typedef signed long s32;
typedef signed int  s16;
typedef signed char s8;

typedef volatile signed long vs32;
typedef volatile signed int vs16;
typedef volatile signed char vs8;

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

typedef unsigned long const uc32;  /* Read Only */
typedef unsigned int const  uc16;  /* Read Only */
typedef unsigned char const uc8;   /* Read Only */

typedef volatile unsigned long vu32;
typedef volatile unsigned int  vu16;
typedef volatile unsigned char vu8;

typedef volatile unsigned long const vuc32;  /* Read Only */
typedef volatile unsigned int const  vuc16;  /* Read Only */
typedef volatile unsigned char const vuc8;   /* Read Only */

#ifndef BOOL
typedef enum {FALSE = 0, TRUE = !FALSE} BOOL;
#endif

typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus;
typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;

typedef float f32;
typedef double d64;
typedef volatile BOOL vb;

#define U8_MAX     ( ( u8  )  255 )
#define S8_MAX     ( ( s8  )  127 )
#define S8_MIN     ( ( s8  )  -128 )
#define U16_MAX    ( ( u16 ) 65535u )
#define S16_MAX    ( ( s16 ) 32767 )
#define S16_MIN    ( ( s16 ) -32768 )
#define U32_MAX    ( ( u32 ) 4294967295uL )
#define S32_MAX    ( ( s32 ) 2147483647 )
#define S32_MIN    ( ( s32 ) 2147483648uL )

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __DATA__TYPE__DEF__H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/










/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : header_file.h
* Author             : Wind snow Li.
* Version            : V1.0
* Date               : 2011-1-18
* Description        : The file automatic contains specific MCU header file.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __HEADER__FILE__H__
#define __HEADER__FILE__H__

/* Includes ------------------------------------------------------------------*/
/* msp430x1xx family */
#if defined (__MSP430C111__) || defined (__MSP430C112__) \
|| defined (__MSP430E112__) || defined (__MSP430F110__) \
|| defined (__MSP430F112__)
#include "MSP430x11x.h"

#elif defined (__MSP430C1111__) || defined (__MSP430C1121__)  \
   || defined (__MSP430F1101__) || defined (__MSP430F1101A__) \
   || defined (__MSP430F1111__) || defined (__MSP430F1111A__) \
   || defined (__MSP430F1121__) || defined (__MSP430F1121A__)
#include "MSP430x11x1.h"

#elif defined (__MSP430F1122__) || defined (__MSP430F1132__)
#include "MSP430x11x2.h"

#elif defined (__MSP430F1222__) || defined (__MSP430F1232__)
#include "MSP430x12x2.h"

#elif defined (__MSP430C1331__) || defined (__MSP430C1351__)
#include "MSP430x13x1.h"

#elif defined (__MSP430F133__) || defined (__MSP430F135__)
#include "MSP430x13x.h"

#elif defined (__MSP430F133__) || defined (__MSP430F135__)
#include "MSP430x13x.h"

#elif defined (__MSP430F1471__) || defined (__MSP430F1481__) \
   || defined (__MSP430F1491__)
#include "MSP430x14x1.h"

#elif defined (__MSP430F147__) || defined (__MSP430F148__) \
   || defined(__MSP430F149__)
#include "MSP430x14x.h"

#elif defined (__MSP430F155__) || defined (__MSP430F156__) \
   || defined(__MSP430F157__)
#include "MSP430x15x.h"

#elif defined (__MSP430F167__) || defined (__MSP430F168__) \
   || defined(__MSP430F169__)
#include "MSP430x16x.h"


/* msp430x2xx family */
#elif defined (__MSP430F2001__) || defined (__MSP430F2011__)
#include "MSP430x20x1.h"

#elif defined (__MSP430F2002__) || defined (__MSP430F2012__)
#include "MSP430x20x2.h"

#elif defined (__MSP430F2003__) || defined (__MSP430F2013__)
#include "MSP430x20x3.h"

#elif defined (__MSP430F2101__) || defined (__MSP430F2111__) \
   || defined (__MSP430F2121__) || defined (__MSP430F2131__)
#include "MSP430x21x1.h"

#elif defined (__MSP430F2102__) || defined (__MSP430F2112__) \
   || defined (__MSP430F2122__) || defined (__MSP430F2132__)
#include "msp430x21x2.h"

#elif defined (__MSP430F2232__) || defined (__MSP430F2252__) \
   || defined (__MSP430F2272__)
#include "MSP430x22x2.h"

#elif defined (__MSP430F2234__) || defined (__MSP430F2354__) \
   || defined (__MSP430F2274__)
#include "MSP430x22x4.h"

#elif defined (__MSP430F2330__) || defined (__MSP430F2350__) \
   || defined (__MSP430F2370__)
#include "MSP430x23x0.h"

/* msp430x4xx family */
#elif defined (__MSP430C412__) || defined (__MSP430C413__)
#include "MSP430x41x.h"

#elif defined(__MSP430F412__) || defined(__MSP430F413__)
#include "MSP430x41x.h"

#elif defined (__MSP430F415__)
#include "MSP430x415.h"

#elif defined (__MSP430F417__)
#include "MSP430x417.h"

#elif defined (__MSP430F4250__) || defined (__MSP430F4260__) \
   || defined(__MSP430F4270__)
#include "MSP430x42x0.h"

#elif defined (__MSP430F423__) || defined (__MSP430F425__) \
   || defined(__MSP430F427__)  || defined (__MSP430W423__) \
   || defined (__MSP430W425__) || defined(__MSP430W427__)
#include "MSP430x42x.h"

#elif defined (__MSP430FE423__) || defined (__MSP430FE425__) \
   || defined(__MSP430FE427__)
#include "MSP430xE42x.h"

#elif defined (__MSP430W423__) || defined (__MSP430W425__) \
   || defined(__MSP430W427__)
#include "MSP430xW42x.h"

#elif defined (__MSP430F435__) || defined (__MSP430F436__) \
   || defined(__MSP430F437__)  || defined (__MSP430G437__) \
   || defined (__MSP430G438__) || defined(__MSP430G439__)
#include "MSP430x43x.h"

#elif defined (__MSP430G437__) || defined (__MSP430G438__) \
   || defined(__MSP430G439__)
#include "MSP430xG43x.h"

#elif defined (__MSP430F447__) || defined (__MSP430F448__) \
   || defined(__MSP430F449__)
#include "MSP430x44x.h"

#elif defined (__MSP430FG4616__) || defined (__MSP430FG4617__) \
   || defined(__MSP430FG4618__) || defined(__MSP430FG4619__)
#include "MSP430xG46x.h"

#else
   #error "无法找到确切的头文件,重新核实"
#endif

/* The following header files related to specific hardware MCU -------------- */

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/










/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : IOport.h
* Author             : Wind snow Li.
* Version            : V1.0
* Date               : 2011-1-18
* Description        : The header file contains some IO port macroinstruction.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __IO__PORT__H__
#define __IO__PORT__H__

/* Includes ------------------------------------------------------------------*/

/* The following header files related to specific hardware MCU -------------- */

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/
#define _ADD_STR(a, b)              a##b
#define ADD_STR(a, b)               _ADD_STR(a, b)

/* PxIN */
#define _IO_PORT_IN(PORT)           (PORT##IN)
#define GPIO_READ_BITS(PORT, BIT)   ( (_IO_PORT_IN(PORT) & BIT) ? (SET):(RESET))
#define GOIO_READ_PORTS(PORT)       ( _IO_PORT_IN(PORT) )

/* PxOUT */
#define _IO_PORT_OUT(PORT)          (PORT##OUT)
#define GPIO_SET_BITS(PORT, BIT)    ( ( _IO_PORT_OUT(PORT) ) |= (BIT) )
#define GPIO_RESET_BITS(PORT, BIT)  ( ( _IO_PORT_OUT(PORT) ) &= ~(BIT) )

/* PxDIR */
#define _IO_PORT_DIR(PORT)          (PORT##DIR)
#define GPIO_OUTPUT_DIR(PORT, BIT)  ( ( _IO_PORT_DIR(PORT) ) |= (BIT) )
#define GPIO_INPUT_DIR(PORT, BIT)   ( ( _IO_PORT_DIR(PORT) ) &= ~(BIT) )


/* PxIE */
#define _IO_PORT_IE(PORT)           (PORT##IE)
#define GPIO_ENABLE_IRQ(PORT, BIT)  ( ( _IO_PORT_IE(PORT) ) |= (BIT) )
#define GPIO_DISABLE_IRQ(PORT, BIT) ( ( _IO_PORT_IE(PORT) ) &= ~(BIT) )


/* PxSEL */
#define _IO_PORT_SEL(PORT)          (PORT##SEL)
#define GPIO_PORT_FUNC(PORT, BIT)   ( ( _IO_PORT_SEL(PORT) ) |= (BIT) )
#define GPIO_MULTI_FUNC(PORT, BIT)  ( ( _IO_PORT_SEL(PORT) ) &= ~(BIT) )

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */
#define TEST_BIT(x)  ( GPIO_READ_BITS( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define SET_BIT(x)   ( GPIO_SET_BITS( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define CLR_BIT(x)   ( GPIO_RESET_BITS( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define BIT_OUT(x)   ( GPIO_OUTPUT_DIR( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define BIT_IN(x)    ( GPIO_INPUT_DIR( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define EINT_BIT(x)  ( GPIO_ENABLE_IRQ( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
#define DINT_BIT(x)  ( GPIO_DISABLE_IRQ( ADD_STR(x, _PORT), ADD_STR(x, _BIT) ) )
/* eg. */
/* #define HC165_SCLK_PORT       P1          // 使用的是P1口                  */
/* #define HC165_SCLK_BIT        BIT5        // BIT5位                        */
/* BIT_OUT( HC165_SCLK );                    // 简单,形象                     */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __IO__PORT__H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/











/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : macro_math.h
* Author             : Wind snow Li.
* Version            : V1.0
* Date               : 2011-1-18
* Description        : The header file contains some math macroinstruction.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __MACRO__MATH__H__
#define __MACRO__MATH__H__

/* Includes ------------------------------------------------------------------*/
#include "data_typedef.h"

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/
/*得到指定地址上的一个字节*/
#define READ_U8( x )       ( *( (u8 *) (x) ) )
/*得到指定地址上的一个字*/
#define READ_U16( x )      (* ( (u16 *) (x) ) )
/*两个数的大者*/
#define MAX( x, y )        ( ((x) > (y)) ? (x) : (y) )
/*两个数的小者*/
#define MIN( x, y )        ( ((x) < (y)) ? (x) : (y) )
/* 求数组的个数 */
#define SIZE_OF_ARRAY(x)   (sizeof( (x) ) / sizeof( (x[0]) ) )
/* 求一个数的绝对值 */
#define ABS(x)             ( ((x) > 0) ?  (x) : ( -(x) ) )

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __MACRO__MATH__H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/










点击此处下载 ourdev_617806GYFNB3.rar(文件大小:798字节) (原文件名:clock.rar)
点击此处下载 ourdev_617807TRQCPE.rar(文件大小:940字节) (原文件名:data_typedef.rar)
点击此处下载 ourdev_617808INGYST.rar(文件大小:1K) (原文件名:header_file.rar)
点击此处下载 ourdev_617809HXWWHS.rar(文件大小:925字节) (原文件名:IOport.rar)
点击此处下载 ourdev_617810KFK5I5.rar(文件大小:699字节) (原文件名:macro_math.rar)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-2-23 10:35:25 | 显示全部楼层
/*******************************************************************************
* Function Name :
* Description   :
* Input         : - :
*                  
*                 - :
*                  
* Output        : None
* Return        : None
*******************************************************************************/

函数的注释

出0入0汤圆

 楼主| 发表于 2011-2-23 10:35:48 | 显示全部楼层
/* H文件 */

/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : .h
* Author             : Wind snow Li.
* Version            : V
* Date               :
* Description        : Header file for .c file.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __H__
#define __H__

/* Includes ------------------------------------------------------------------*/

/* The following header files related to specific hardware MCU -------------- */

/* Exported types ------------------------------------------------------------*/

/* Exported constants --------------------------------------------------------*/

/* Exported macro ------------------------------------------------------------*/

/* Exported functions ------------------------------------------------------- */
/* ------------------ High layer function ----------------------------------- */

/* ------------------ Low layer function  ----------------------------------- */


#endif /* __H__ */

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/

出0入0汤圆

 楼主| 发表于 2011-2-23 10:36:29 | 显示全部楼层
/* C文件注释 */

/********************* (C) COPYRIGHT Wind Snow Team ****************************
* File Name          : .c
* Author             : Wind snow Li.
* Version            : V
* Date               :
* Description        : This file provides all the xxx( BKP firmware ) functions.
********************************************************************************
*
*
*
*
*
*******************************************************************************/

/* Includes ------------------------------------------------------------------*/

/* The following header files related to specific hardware MCU -------------- */

/* Private typedef -----------------------------------------------------------*/

/* Private define ------------------------------------------------------------*/

/* Private macro -------------------------------------------------------------*/

/* Private constants ---------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

/* Private functions ---------------------------------------------------------*/

/******************* (C) COPYRIGHT Wind Snow Team ************* END OF FILE ***/

出0入0汤圆

发表于 2011-2-23 11:07:15 | 显示全部楼层
#define _IO_PORT_OUT(PORT)          (PORT##OUT)
#define GPIO_SET_BITS(PORT, BIT)    ( ( _IO_PORT_OUT(PORT) ) |= (BIT) )
#define GPIO_RESET_BITS(PORT, BIT)  ( ( _IO_PORT_OUT(PORT) ) &= ~(BIT) )
-----------------------------------------------------------
这样的话,我要p4.2输出1的话,得这么写?
GPIO_SET_BITS(4, BIT1)。其实就是 GPIO_SET_BITS(4, 0x0002)这样是吗

出0入0汤圆

发表于 2011-2-23 11:57:16 | 显示全部楼层
楼主宏定义用的不错,可以借鉴一下

出0入0汤圆

 楼主| 发表于 2011-2-23 12:04:43 | 显示全部楼层
回复【4楼】lovewwy
#define _io_port_out(port)          (port##out)  
#define gpio_set_bits(port, bit)    ( ( _io_port_out(port) ) |= (bit) )  
#define gpio_reset_bits(port, bit)  ( ( _io_port_out(port) ) &= ~(bit) )  
-----------------------------------------------------------
这样的话,我要p4.2输出1的话,得这么写?
gpio_set_bits(4, bit1)。其实就是 gpio_set_bits(4, 0x0002)这样是吗
-----------------------------------------------------------------------


错,你没有仔细看帖子

/* eg. */
/* #define HC165_SCLK_PORT       P1          // 使用的是P1口                  */
/* #define HC165_SCLK_BIT        BIT5        // BIT5位                        */
/* BIT_OUT( HC165_SCLK );                    // 简单,形象                     */

BIT_IN( HC165_SCLK );

SET_BIT( HC165_SCLK );

CLR_BIT( HC165_SCLK );

if( TEST( HC165_SCLK ) == SET ) {};

1: 具有很强的可读性,基本上和别人的 #define HC595_SCLK_SET( )   P1OUT |= BIT5 可读性差不多

2:修改起来很简单,不像#define HC595_SCLK_SET( )   P1OUT |= BIT5 修改的地方多。

出0入0汤圆

发表于 2011-2-23 12:19:21 | 显示全部楼层
回复【6楼】lihuyong 如风似雾
-----------------------------------------------------------------------

哦。谢谢了啊。

出0入0汤圆

发表于 2011-2-23 13:34:23 | 显示全部楼层
在论坛上逛了两天 终于找到我要的了  谢谢楼主无私奉献

出0入0汤圆

发表于 2011-2-23 14:12:42 | 显示全部楼层
#define _ADD_STR(a, b)              a##b
这种宏定义是什么意思  a##b是什么运算?

出0入0汤圆

 楼主| 发表于 2011-2-23 14:38:27 | 显示全部楼层
回复【9楼】cumtgao  
-----------------------------------------------------------------------
自己翻书,翻不到就放狗。

出0入0汤圆

发表于 2011-2-23 14:55:40 | 显示全部楼层
额。。。放狗之前翻了下书 明白是个连接符
#define _io_port_out(port,out) (port##out) 编译时将port 和out连接用
上面_io_port_out(p1,out)等效于P1OUT

#define _IO_PORT_SEL(PORT)          (PORT##SEL)  这条怎么理解?
难道是 _IO_PORT_SEL(P1)//等效于 P1SEL?

出0入0汤圆

发表于 2011-2-23 16:22:22 | 显示全部楼层
回复【11楼】cumtgao
-----------------------------------------------------------------------

是啊。不过那个## 是连接符你是从哪个书找的啊 。
我是没找到,从楼主发的程序里推测出来可能是个连接符。

出0入0汤圆

发表于 2011-2-23 17:37:49 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-2-24 10:09:15 | 显示全部楼层
回复【12楼】lovewwy
-----------------------------------------------------------------------

很多书上都有啊,不过用得不多而已。作用是在编译的时候将前后连接起来。

出0入0汤圆

发表于 2011-3-8 13:12:11 | 显示全部楼层
不错,看来真的是花了时间和心思的

出0入0汤圆

发表于 2011-7-2 14:54:17 | 显示全部楼层
好帖子必须顶起来~~~~~~~~~

出0入0汤圆

发表于 2011-7-3 01:00:29 | 显示全部楼层
多谢分享

出0入0汤圆

发表于 2011-9-11 17:20:54 | 显示全部楼层
谢谢楼主无私奉献
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 22:52

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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