北邮dsp硬件实验【优质内容】
DSP硬件实验报告 班级:2010211204 学号:10210992 姓名:许鹏 2012年12月15号实验一:常用指令实验一、 实验目的1.熟悉DSP开发系统的连接2.了解DSP开发系统的组成和结构和应用系统构成3.熟悉常用C54X系列指令的用法(程序寻址,寄存器,I/O口,定时器,中断控制)二、 实验设备计算机,CCS 2.0版软件,DSP仿真器,实验箱三、 实验操作方法1、 系统连接进行DSP实验之前,先必须连接好仿真器、实验箱及计算机,连接方法如下所示:在硬件安装完成后,接通仿真器电源或启动计算机,此时,仿真盒上的“红色小灯”应点亮,否则DSP开发系统与计算机连接有问题2、 运行CCS程序先实验箱上电,然后启动CCS,此时仿真器上的“绿色小灯”应点亮,并且CCS正常启动,表明系统连接正常;否则仿真器的连接、JTAG接口或CCS相关设置存在问题,掉电,检查仿真器的连接、JTAG接口连接,或检查CCS相关设置是否正确四、 实验步骤与内容(一) 简单指令程序运行实验1、 实验使用资源实验通过实验箱上的XF指示灯观察程序运行结果2、 实验过程启动CCS 2.0,并加载“exp01.out”;加载完毕后,单击“Run”运行程序;实验结果:可见XF灯以一定频率闪烁;单击“Halt”暂停程序运行,则XF灯停止闪烁,如再单击“Run”,则“XF”灯又开始闪烁;关闭所有窗口,本实验完毕。
源程序查看:用下拉菜单中Project/Open,打开“Exp01.pjt”,双击“Source”,双击“exp01.asm”可查看源程序源程序注释如下:源程序:注释:;File Name:exp01.asm;the program is compiled at no autoinitialization mode .mmregs .global _main_main: stm #3000h,sp ssbx xf call delay rsbx xf call delay b _main nop nop ;delay .5 second delay: stm 270fh,ar3 loop1: stm 0f9h,ar4 loop2: banz loop2,*ar4- banz loop1,*ar3- ret nop nop ;stm 2 cycles;banz when TRUE 4 cycles; FALSE 2 cycles;0f9h=>249d;270fh=>9999d .end定义存储器映像寄存器 全局符号,可在外部定义;设置堆栈指针寄存器的值为3000h;置位状态寄存器xf;调用delay函数;复位状态寄存器xf;调用delay函数;无条件转移至_main;空指令;空指令;设置辅助寄存器ar3值为9999;设置辅助寄存器ar4值为249;寄存器ar4值减一,当其值不为0时跳转到loop2;寄存器ar3值减一,当其值不为0时跳转到loop1;返回;空指令;空指令(二)资料存储实验1、 实验使用资源本实验指导书是以TMS32OVC5410为例,介绍相关的内部和外部内存资源。
对于其它类型的CPU请参考查阅相关的资料手册下面给出TMS32OVC5410的内存分配表:对于存储空间而言,映像表相对固定值得注意的是内部寄存器与存储空间的映像关系因此在编程应用时这些特定的空间不能作其它用途对于程序存储空间而言,其映像表和CPU的工作模式有关当MP/MC引脚为高电平时,CPU工作在微处理器模式;当MP/MC引脚低电平时,CPU工作在为计算机模式具体的内存映像关系如上如所示内存实验主要了解内存的操作和DSP的内部双总线结构并熟悉相关的指令代码和执行过程等2、 实验过程连接好DSP开发系统,运行CCS软件;a) 在CCS的Memory窗口中查找C5410各个区段的数据存储器地址,在可以改变的存储器内容的地方,选定地址随意改变其中内容并观察结果;b) 在CCS中装载实验示范程序,单步执行程序,程序中写入和读出的数据存储地址的变化;c) 改变其它寻址方式,进行观察数据存储器地址与写入和读出数据的的变化本实验说明:本实验程序将对0x1000开始的8个地址空间,填写入0xAAAA的数值,然后读出,并存储到0X1008开始的8个地址空间在CCS中可以观察DATA内存空间地址0X1000~0X100F值的变化。
样例程序实验操作说明:启动CCS 2.0,并加载“exp02.out”,用“View”下拉菜单中的“Memory”查看内存单元,输入要查看的内存单元地址,本实验要查看0x1000H~0x100FH单元的数值变化,输入地址0x1000H,查看0x1000H~0x100FH单元的初始值,单击“Run”运行程序,也可以“单步”运行程序,单击“Halt”暂停程序运行,查看0x1000H~0x100FH单元内数值的变化关闭各窗口,本实验完毕源程序注释:源程序:注释:*File Name:exp02.asm ;get some knowledge of the cmd file;the program is compiled at no autoinitialization mode .mmregs .global _main _main: ;store data stm 1000h,ar1 rpt #07h st 0aaaah,*ar1+ ;read data then re-store stm 7h,ar3 stm 1000h,ar1 stm 1008h,ar2 loop: ld *ar1+,t st t,*ar2+ banz loop,*ar3- here: b here .end;将外部内存地址1000h赋给ar1;循环执行下一条指令8次;将0aaaah的值存储在ar1所对应内存中,且ar1值加1 ;将7h赋给辅助寄存器ar3;将地址1000h赋给辅助寄存器ar1;将地址1008h赋给辅助寄存器ar2;将辅助寄存器ar1的值赋给t,且ar1内存地址加1;将t的值存储在ar2所对应内存中,且ar2内存地址加1;寄存器ar3值减1,当其值不为0时跳转到loop;无条件转移至here(三)I/O实验1、 实验使用资源数字量输入信号全部拓展出来,数字量输入接口主要由两个,D_Exp与扳东开关连接,PX4和PX5与电平转换芯片(74LVC245)连接,其功能分别为:D_Exp—数字量输入扩展接口123456789I0I1I2I3I4I5I6I7VCC电平转换扩展接口1234PX4—5VIN0IN1IN2IN3PX5—3.3VOUT3OUT2OUT1OUT0通过PORTR,PORTW指令可以实现I/O口的输入输出功能,如数字量采集实验。
实验说明:实验中采用简单的一一映像关系来对I/O口进行验证,目的是使实验者能够对I/O 有一目了然的认识在本实验系统中,提供的IO空间分配如下:CPU1:0x0000 switch input (X) 80x0001 LED output(X) 8CPU2: 0x0001 DAC0x0004 Read_Key0x0006 Write_Key0x000F Write_LCD0x8000 HPIC00x8001 HPIC10x8002 HPID0(AUTO)0x8003 HPID1(AUTO)0x8004 HPIA00x8005 HPIA10x8006 HPID0(NO AUTO)0x8007 HPID1(NO AUTO)实验程序框图注意: 电平转换接口主要考虑应用3.3V的中央处理器时,系统的电平兼容问题,用来保护CPU不受损坏系统采用74LVC245电平兼容转换器件2、 实验过程运行CCS程序,装载示范程序,调整K0~K7的开关,观察LP1~LP7 LED亮灭的变化,以及输入和输出状态是否一致注意:输出为0时点亮灯)例程序实验操作说明启动CCS 2.0,并加载“exp03.out”,单击“Run”运行程序,任意调整K0~K7开关,可以观察到对应LP0~LP7灯“亮”或“灭”;单击“Halt”,暂停持续运行,开关将对灯失去控制。
关闭所有窗口,本实验完毕源程序查看:用下拉菜单中Project/Open,打开“Exp03.pjt”,双击“Source”,双击“exp03.asm”可查看源程序代码如下:源程序:注释:;File Name :exp03.asm;learn how to operate the I/O ports;get some knowledge of the rts.lib file;in the I/O space 0x0000=>8 switches; 0x0001=>8 LEDs .mmregs .global _main .text_main: stm 3100h,sp stm 1000h,ar1 portr 00h,*ar1 nop nop portw *ar1,01h nop nop b_main nop nop .end;设置堆栈指针寄存器的值为3000h;设置辅助寄存器ar1值为1000h;从00h端口读数据传入ar1所指向的内存空间,读按键;空指令;空指令;将ar1所指向的内存空间的值赋给01h端口,控制led灯;空指令;空指令 ;无条件转移至_main,实现按键控制;空指令;空指令(四)定时器实验1、实验使用资源定时器实验时要用到C54芯片的定时器控制寄存器,定时器时间常数寄存器,定时器中断响应,寄存器定义详见C54芯片资料。
C54的定时器是一个20位的减法计数器,可以被特定的状态位实现停止、重新启动、重设置或禁止,可以使用该定时器产生周期性的CPU中断,控制定时器中断频率的两个寄存器是定时周期寄存器PRD和定时减法寄存器TDDR定时器实验通过 LED(LP1~LP7)来显示在本系统中,时钟频率为20MHZ,令PRD = 0x4e1f,这样得到每1/1000秒中断一次,通过累计1000次,就能定时1秒钟2、实验过程调入样例程序,装载并运行;例程序实验操作说明启动CCS 2.0,并加载“exp04.out”,单击“Run”运行,可观察到LED灯(LP0~LP7)以一定的间隔时间不停摆动,单击“Halt”,暂停程序运行,LED 灯停止闪烁,单击“Run”,运行程序,LED灯又开始闪烁关闭所有窗口,本实验完毕源程序:exp04.c注释:#include
停止所有的中断 中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断; 停止定时器; 设置定时器, 定时器周期计数器; 打开定时器 定时器控制寄存器;允许定时器中断;设置ST1.INTM=0,打开所有中断源程序:port.asm注释: .mmregs .global _porta .global _portb _porta: stm 304h,ar1 st 5555h,*ar1 portw *ar1,01h ret _portb: stm 304h,ar1 st 0aaaah,*ar1 portw *ar1,01h ret ;将304h赋给辅助寄存器ar1;将内存304h的内容赋予5555h;将内存304h的值写入01h端口;将内存304h的内容赋予0aaaah;将内存304h的值写入01端口源程序:vectors.asm注释: .sect ".vectors" .ref _c_int00 .ref _timer .align 0x80 RESET: BD_c_int00 STM #200,SP stack size of 200nmi: RETE NOP NOP NOP sint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: RETE NOP NOP NOPtint: b _timer NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP .end引用函数c_int00引用了c中的函数页边界排列reset vector,复位中断响应延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中开辟堆栈空间栈的大小设置为200中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。
保留出中断向量的地址空间中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回定时器产生的时钟中断,返回到c中定义的timer程序,b即是跳转同步串口0(McBSP0)接受的中断,直接返回同步串口0(McBSP0)发送的中断,直接返回同步串口1(McBSP1)接受的中断,直接返回同步串口1(McBSP1)发送的中断,直接返回(五)INT2中断实验1、实验使用资源本实验是进行C54芯片的INT2中断练习, C54芯片中断INT2是低电平单脉冲触发;实验采用导线一端连接D_Exp—数字量输入扩展接口I0,经PX4的IN3,到PX5的OUT0电平转换,再与另一端连接INT2插孔;拨动开关K0一次,就产生一个低电平单脉冲;运行示范程序,观察LP1~LP7 LED灯的输出变化;可观察到每拨动开关K0一次LP1~LP7灯亮灭变化一次;2、实验过程样例程序实验操作说明启动CCS 2.0,并加载“exp05.out”,单击“Run”运行程序,反复拨动开关K0,观察LP1~LP7 LED灯亮灭变化,单击“Halt”暂停程序运行,反复拨动开关K0,LP1~LP7 LED灯亮灭不变化; 关闭所有窗口,本实验完毕。
源程序查看:用下拉菜单中Project/Open,打开“Exp05.pjt”,双击“Source”,双击“int2.c”、“initial.asm”、“port.asm”以及“vectors.asm”可查看各源程序源程序:int2.c注释:interrupt void int2c(); extern void initial();extern void porta();extern void portb();int flag=0;main(){ initial(); while(1){;}} interrupt void int2c(){ asm("nop"); *(int *)0x300=*(int *)0x300+2 if(flag==0) { flag=1; porta(); } else { flag=0; portb(); }} ; /*break here to show if interrupt happened*/这是一个记录外部中断的标志,通过记录0x300h中的值来记录源程序:initial.asm注释: .mmregs .global _initial .text _initial: stm 300h,ar3 st #00h,*ar3 stm 302h,ar4 st #00h,*ar4 ssbx 1,11 stm 00h,imr stm 0ffffh,ifr stm 04h,imr rsbx 1,11 ret .end;将00h存入地址为300h的内存中;将00h存入地址为302h的内存中;设置ST1.INTM=1,停止所有的中断;停止所有的中断,中断屏蔽寄存器(IMR)在需要的时候独立地屏蔽特定的中断;清除所有中断的标志位,中断标志寄存器(IFR)用来指明各个中断的目前状态。
开启int2的外部中断;打开所有中断总开关源程序:port.asm注释: .mmregs .global _porta .global _portb _porta: stm 304h,ar1 st 5555h,*ar1 portw *ar1,01h ret _portb: stm 304h,ar1 st 0aaaah,*ar1 portw *ar1,01h ret ; 将304h赋给辅助寄存器ar1;将内存304h的内容赋予5555h;将内存304h的值写入01h端口;将内存304h的内容赋予0aaaah;将内存304h的值写入01端口源程序:vectors.asm注释: .sect ".vectors" .ref _c_int00 .ref _int2c .align 0x80 RESET: BD_c_int00 STM #200,SP stack size of 200nmi: RETE NOP NOP NOP sint17 .space 4*16sint18 .space 4*16sint19 .space 4*16sint20 .space 4*16sint21 .space 4*16sint22 .space 4*16sint23 .space 4*16sint24 .space 4*16sint25 .space 4*16sint26 .space 4*16sint27 .space 4*16sint28 .space 4*16sint29 .space 4*16sint30 .space 4*16int0: RETE NOP NOP NOPint1: RETE NOP NOP NOPint2: RETE NOP NOP NOPtint: b _timer NOP NOPrint0: RETE NOP NOP NOPxint0: RETE NOP NOP NOPrint1: RETE NOP NOP NOPxint1: RETE NOP NOP NOPint3: RETE NOP NOP NOP .end引用函数c_int00页边界排列reset vector,复位中断响应延迟分支到C主程序默认入口地址,c_int00是c程序的入口,这里即进入main函数中开辟堆栈空间中断屏蔽置为0,响应中断,不可屏蔽中断产生时,使中断屏蔽取消,后返回。
保留出中断向量的地址空间中断寄存器设置RETE返回并允许中断外部中断产生时,直接返回定时器产生的时钟中断,返回到c中定义的timer程序,b即是跳转同步串口0(McBSP0)接受的中断,直接返回同步串口0(McBSP0)发送的中断,直接返回同步串口1(McBSP1)接受的中断,直接返回同步串口1(McBSP1)发送的中断,直接返回实验二 A/D采样实验一、 实验目的1. 掌握利用TLV320AD50实现A/D转换的技术基本原理和常用方法2. 学会DSP的多信道缓冲串口的应用方法3. 掌握并熟练使用DSP和AD50的接口及其操作4. 通过实验加深对DSP系统频谱混叠认识二、 实验设备计算机,CCS 2.0软件,DSP仿真器,实验箱,示波器,连接导线三、 实验步骤和内容1. 实验连线² 用短接块短接SS1的1,2脚,设置输出低频信号;短接S2 的Sin脚,设置输出正弦波信号,这时模拟信号产生单元SP1输出为低频正弦波² JD跳线断开,设置语音处理单元输入信号为交流;并用导线连接SP1脚和JAD3的1脚,将模拟低频正弦波信号接入语音处理单元² 用导线连接JAD1的INP和INPF,以及JAD2的INM和INMF,将语音处理单元输出的差动模拟信号接入AD50输入端。
2. 运行 CCS 2.0软件, 装入“exp06.pjt”工程文件,双击“exp06.pjt”及“Source”3.加载“exp06.out”示范程序,在“exp06.c”中“READAD50()”处,设置断点,运行程序,通过用下拉菜单中的View / Graph的“Time/Frequency”打开一个图形观察窗口,调节输入信号的频率或幅值, 观察图形情况(幅值和频率),设置该图形观察窗口的参数,观察起始地址为0x1000H,长度为256的内存单元内的数据,该资料为输入信号经A/D转换之后的数据,数据类型为16位整型,击“Animate”运行程序,在图形观察窗口观察A/D转换后的采样波形在图形观察窗口观察A/D转换后的采样波形;旋转开发板上的电位器,使幅度调节到适当位置,得到波形如下:旋转开发板上的频率旋钮,得到波形如下:继续改变频率,导致频谱混叠,波形如下:实验三:D/A转换实验一、 实验目的1. 掌握利用TLV320AD50实现D/A转换的技术基本原理和常用方法2. 进一步学习DSP的多信道缓冲串口的应用方法3. 掌握并熟练使用DSP和AD50的输出接口及其操作二、 实验设备计算机,CCS 2.0版软件,DSP仿真器,实验箱,示波器。
三、 实验步骤与内容1. 不需联机,通过示波器观测输出波形情况;2. 运行CCS软件,加载示范源程序,了解实验程序; 3. 加载示范程序“exp07.out”,并通过File/Data/Load装载波形数据sin.dat4.按F5运行程序,用示波器检测JAD4的3脚AD50_DAout输出一个正弦波;5.在程序中,改变相应资料来实现改变波形和周期;得到的波形如下所示:在示波器观察的模拟信号波形如下,由以上两个波形图可以看出,数字信号周期为2.5ms,模拟信号周期为40s右由模拟角频率与数字角频率的关系Ω==ω*T=ω/fs可推导出采样频率为16kHz.之后也是问了老师,得知示波器的采样频率大约是10K+实验四:数字滤波器(FIR算法实验)一.实验目的1.掌握用窗函数法设计FIR数字滤波器的原理和方法;2.熟悉线性相位FIR数字滤波器特性;3.了解各种窗函数对滤波特性的影响二.实验设备计算机,CCS 2.0 版软件,实验箱,DSP仿真器,短接块,导线三.实验原理1.有限冲击响应数字滤波器的基础理论;2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器);3.数字滤波器系数的确定方法。
四.实验步骤1.复习如何设计FIR数字滤波阅读本实验原理,掌握设计步骤;2.阅读本实验所提供的样例子程序;3.运行CCS软件,对样例程序进行跟踪,分析结果;4.填写实验报告5.样例程序实验操作说明1)实验前准备在模拟信号产生单元中,一路信号源产生低频正弦波信号(S1 置“L”),另一路信号源产生高频正弦波信号(S11置“H”),检查模拟信号输出端口“A”与“B”应断开;实验箱上电,用示波器分别观测out1和out2输出的模拟信号,调节电位器SPR1、SPR2(out1输出信号的频率调节和幅值调节)和电位器SPR11、SPR12(out2输出信号的频率调节和幅值调节),直至满意为止;本样例实验程序建议:1.低频正弦波信号为100Hz/1V;2.高频正弦波信号为6KHz/1V;3.实验箱掉电,做以下连接和检查:4.短接输出端口“A”与“B”;5.短接JAD1的INM、INMF;短接JAD2的INP、INPF;6.用导线连接out2(模拟信号输出)和JAD3 1脚(MIC_IN);7.检查:JD 是否断开注:有关以上连接的说明,可参见第八章中语音接口跳线接输出接口配置使用说明以及信号产生单元配置说明。
正确完成计算机、DSP仿真器和实验箱的连接后,系统上电实验程序说明:该程序为51阶FIR低通滤波器算法程序,采用矩形窗函数实现,数组h和xmid长度均为51,fs 为采样频率,fstop 为滤波器截止频率,可以修改以上参数来改变滤波器性能重新“Rebuild All”后,并加载“Load”,单击“Animate”,可得到不同的实验结果;实验结果:在CCS2.0环境,同步观察输入信号及其FIR低通滤波结果通过修改程序,使得滤波器变为高通滤波器未修改的源程序中的.c文件代码如下:extern void InitC5402(void);extern void OpenMcBSP(void);extern void CloseMcBSP(void);extern void READAD50(void);extern void WRITEAD50(void);/************************************************************************* Main Function Program***********************************************************************/ #include "stdio.h" #include "math.h" #define pi 3.1415927 double npass,h[51], x, y, xmid[51]; int m=50; int n=256; void firdes (int m, double npass); main () { int xm,ym; int *px = (int*)0x3000; int *py = (int*)0x3100; double fs,fstop,r,rm; int i,j,p,k,s; k=0; fs = 16000; fstop = 2000; npass = fstop/fs; for (i=0; i<=m; i++) { xmid[i]=0; } firdes(m, npass); for (; ; ) { OpenMcBSP(); for (s=0; s<=4; s++) { READAD50(); for (i=0; i<=n-1; i++) { px = (int*)(0x3000+i); xm = *px; x = xm/32768.0; for (p=0; p<=m; p++) { xmid[m-p] = xmid[m-p-1]; } xmid[0] = x; r = 0; rm= 0; for (j=0; j<=m; j++) { r = xmid[j] * h[j]; rm = rm + r; } y = rm; py = (int*)(0x3100+i); ym = (int)(32768.0 * y); *py = ym; } WRITEAD50(); k++; } } /*void PROCESSING(void) { do the necessery operations here!*/ } void firdes(int m, double npass) { int t; for (t=0; t<=m; t++) { h[t] = sin((t-m/2.0)*npass*pi)/(pi*(t-m/2.0)); } if (t=m/2) h[t]=npass; } /************************************************************************* End of File –– exp08.c***********************************************************************/低通滤波器输出波形图如下:现在要改成高通滤波器,可以在原来的程序中阴影部分那一行改为h[t] = (sin((t-m/2.0)*pi)-sin((t-m/2.0)*npass*pi))/(pi*(t-m/2.0));修改后的高通滤波器波形图如下所示:实验总结:首先来说说这几个实验吧,前五个都是入门实验,让我们自己看懂代码,对于汇编语言的查找确实是很烦人,这个必须要记,不想里面的.C文件那样容易看懂,这也算是我们第一次接触汇编吧。
然后就是AD,DA转换的实验了,按照要求的方式连接开发板上的接口,做起来也不复杂不过在这个过程中,我对于采样有了更深的认识,因为自己算除了机器的采样频率,很有成就感最后就是低通高通滤波器了,老师已经给了我们一个低通滤波器,把代码中的函数部分和端口改一下就能实现高通了,记得我们是用汉宁窗实现是高通滤波器,这也对我们dsp所学知识有了一定的应用总的来说,这次硬件实验,让我们对于硬件的底层结构和CPU以及内存地址的操作有了一定的了解,关于汇编语言也有了一定的认识,虽然还谈不上完全掌握这些知识,但是对于我们以后自学或者选择自己发展方向也是有一定的帮助的确实要成为一名好的工程师,软件和硬件必须得兼通我想忘记你,可做不到…… 其实你并不是完美得无可替代, 你永远是不懂我的心思 不知道我为什么会因为一件小事 就能开心一整天 也不知道我为什么会因为一句话 而难过好多天 不懂我的任性 我的乱发脾气 我的恨从哪里来? 为什么我总是有那么多脾气 总是那么斤斤计较 总是那么不懂事 其实所有的所有 只是因为爱你 心里全部都是你 你能够活在一个没有我的世界 而我却只能活在一个只有你的天空 谁让我先动了情 谁让我爱上了一个不爱我的人 所以在这场比赛里 我就注定是输家 但是我就是爱你爱得无可救药, 即使你的心里根本没有我的位置 然而,你知道吗? 这辈子最大的幸运就是认识你,而最大的不幸却是不能拥有你,可是你却不会遇到第2个像我这么爱你的人。
在错的时间遇上对的人是一场伤,在对的时间遇上错的人是一声叹息,在对的时间遇上对的人是一生的幸福,你是幸福的吗? 如果爱你是错,我情愿一错再错选择你所爱的,然后爱你所选择的 爱你,却不能与你长相厮守,这是一种痛苦,等你却不知道结局,这是一种无耐,但求此刻能拥有你,但求此生能与你在一起! 不再相见并不一定等于分离,不再通讯也不一定等于忘记,因为你的幸福和快乐,会是我一直的期盼别把我忘了,请让我占据你心中唯一我的地盘,好吗? 爱你,却要无欲无求,好难!爱你却要偷偷摸摸,好累!爱你却让自己心碎,好惨!但竟然心甘情 愿,好傻! 想起你,我的心就有说不出的痛,你是否知道?我能感到你的痛因为你在我的心中,不知远方的你现在还好吗? 很爱你才会怕明天一切都更改,在乎你才会经不起任何小小的伤害 如果有一天,当你想起有谁爱过你,那其中一定有我一个,如果有一天,没有人爱你了,那一定是我死了 有一些人,有些感情,错过了一次,也许就会错错这整整的一生 如果输家可以一直这样爱下去, 我甘愿成为一个输家, 然后, 一直这样爱下去,就算和你没有结局,我还是喜欢你…… 无怨无悔, 直至心灰意冷…… 33图表b。




