本帖最后由 86806 于 2016-8-23 13:47 编辑
原子好,逛咱们论坛好几年了,一直没注册,也感谢原子的无需注册也能下载的豁达,注册日,发个DAC例程分享下
本例程为汇编代码,权威指南上有详细指令解释,DMA的特点是无需CPU参与,一次初始化即可,即使debug断点调试也不影响正弦波输出
例程已实测,波形完整,寄存器直接操作,无需任何库
[mw_shl_code=asm,true]
DAC_CR_DMAEN1 equ 12
DAC_CR_TSEL2 equ 03
DAC_CR_TEN1 equ 02
DAC_CR_BOFF1 equ 01
DAC_CR_EN1 equ 00
GPIOA_04_DAC_CH_01 equ 0x04
DAC_CH equ DAC_DHR12R1
DAC_PPC equ 1000 ; Point Per Cycle
;-------------------------------------------------------------------
EXPORT Drv_DAC
GET DAC_TAB.s
GET ../Include.inc
AREA _Drv_DAC, Code, ReadOnly
Drv_DAC ldr r0,=RCC
ldr r1,[r0,#RCC_AHBENR]
orr r1,#(1<<DMA2EN)
str r1,[r0,#RCC_AHBENR]
ldr r1,[r0,#RCC_APB1ENR] ; 使能 DAC
ldr r2,=(1<<DACEN r:1<<TIM4EN)
orr r1,r2
str r1,[r0,#RCC_APB1ENR]
ldr r1,[r0,#RCC_APB2ENR] ; 使能 PortA ,使能端口复用
orr r1,#(1<< ORTAEN r:1<<AFIOEN)
str r1,[r0,#RCC_APB2ENR]
ldr r0,=GPIOA ; 初始化DAC端口,PA4初始化为模拟口
ldr r1,[r0,#GPIO_CRL]
bic r1,#(0x0F<<GPIOA_04_DAC_CH_01 * 4)
orr r1,#(GPIO_MODE_IN_AIN<<GPIOA_04_DAC_CH_01)
str r1,[r0,#GPIO_CRL]
ldr r0,=DAC
mov r1,#(1<<DAC_CR_DMAEN1 r:5<<DAC_CR_TSEL2 r:1<<DAC_CR_TEN1 r:1<<DAC_CR_EN1)
str r1,[r0,#DAC_CR]
ldr r0,=DMA2
mov r1,#00 ; 初始化DMA接收
str r1,[r0,#DMA_CCR3]
orr r1,#(1<<IFCR_CGIF3 r:1<<IFCR_CTCIF3 r:1<<IFCR_CHTIF3 r:1<<IFCR_CTEIF3)
str r1,[r0,#DMA_IFCR]
mov r1,#DAC_PPC
str r1,[r0,#DMA_CNDTR3]
ldr r1,=DAC_TAB_Sin_1000
str r1,[r0,#DMA_CMAR3]
ldr r1,=DAC + DAC_DHR12R1
str r1,[r0,#DMA_CPAR3]
ldr r1,=(1<<CCR_MSIZE r:1<<CCR_PSIZE r:1<<CCR_MINC:or:1<<CCR_CIRC:or:1<<CCR_DIR:or:1<<CCR_EN)
str r1,[r0,#DMA_CCR3] ; 启动 DMA1_CH3 发送数据
ldr r0,=TIM4
mov r1,#(1<<0)
str r1,[r0,#TIM_CR1]
mov r1,#(02<<CR2_MMS)
str r1,[r0,#TIM_CR2]
mov r1,#00
str r1,[r0,#TIM_SR]
str r1,[r0,#TIM_CNT]
mov r1,#72 - 1 ; CLK_Max 72MHz
str r1,[r0,#TIM_PSC] ; 分频系数,CK_CNT = Fck_psc / (PSC+1)
mov r1,#19 ; unit:1us
str r1,[r0,#TIM_ARR]
bx lr
[/mw_shl_code]
以下为正弦波字表
[mw_shl_code=asm,true]
EXPORT DAC_TAB_Sin_1000
AREA _DAC_TAB, DATA, READONLY
DAC_TAB_Sin_1000 dcw 2047,2060,2073,2086,2098,2111,2124,2137,2150,2163
dcw 2176,2188,2201,2214,2227,2240,2252,2265,2278,2291
dcw 2304,2316,2329,2342,2355,2367,2380,2393,2405,2418
dcw 2431,2443,2456,2468,2481,2494,2506,2519,2531,2544
dcw 2556,2569,2581,2593,2606,2618,2630,2643,2655,2667
dcw 2680,2692,2704,2716,2728,2740,2752,2765,2777,2789
dcw 2801,2812,2824,2836,2848,2860,2872,2884,2895,2907
dcw 2919,2930,2942,2953,2965,2976,2988,2999,3011,3022
dcw 3033,3044,3056,3067,3078,3089,3100,3111,3122,3133
dcw 3144,3155,3165,3176,3187,3198,3208,3219,3229,3240
dcw 3250,3261,3271,3281,3291,3302,3312,3322,3332,3342
dcw 3352,3362,3372,3381,3391,3401,3410,3420,3429,3439
dcw 3448,3458,3467,3476,3485,3494,3504,3513,3521,3530
dcw 3539,3548,3557,3565,3574,3582,3591,3599,3608,3616
dcw 3624,3632,3641,3649,3657,3664,3672,3680,3688,3695
dcw 3703,3711,3718,3725,3733,3740,3747,3754,3761,3768
dcw 3775,3782,3789,3796,3802,3809,3815,3822,3828,3835
dcw 3841,3847,3853,3859,3865,3871,3877,3882,3888,3894
dcw 3899,3905,3910,3915,3920,3926,3931,3936,3941,3945
dcw 3950,3955,3960,3964,3969,3973,3977,3982,3986,3990
dcw 3994,3998,4002,4005,4009,4013,4016,4020,4023,4026
dcw 4030,4033,4036,4039,4042,4045,4047,4050,4053,4055
dcw 4058,4060,4062,4065,4067,4069,4071,4073,4074,4076
dcw 4078,4079,4081,4082,4084,4085,4086,4087,4088,4089
dcw 4090,4091,4091,4092,4093,4093,4093,4094,4094,4094
dcw 4094,4094,4094,4094,4093,4093,4093,4092,4091,4091
dcw 4090,4089,4088,4087,4086,4085,4084,4082,4081,4079
dcw 4078,4076,4074,4073,4071,4069,4067,4065,4062,4060
dcw 4058,4055,4053,4050,4047,4045,4042,4039,4036,4033
dcw 4030,4026,4023,4020,4016,4013,4009,4005,4002,3998
dcw 3994,3990,3986,3982,3977,3973,3969,3964,3960,3955
dcw 3950,3945,3941,3936,3931,3926,3920,3915,3910,3905
dcw 3899,3894,3888,3882,3877,3871,3865,3859,3853,3847
dcw 3841,3835,3828,3822,3815,3809,3802,3796,3789,3782
dcw 3775,3768,3761,3754,3747,3740,3733,3725,3718,3711
dcw 3703,3695,3688,3680,3672,3664,3657,3649,3641,3632
dcw 3624,3616,3608,3599,3591,3582,3574,3565,3557,3548
dcw 3539,3530,3521,3513,3504,3494,3485,3476,3467,3458
dcw 3448,3439,3429,3420,3410,3401,3391,3381,3372,3362
dcw 3352,3342,3332,3322,3312,3302,3291,3281,3271,3261
dcw 3250,3240,3229,3219,3208,3198,3187,3176,3165,3155
dcw 3144,3133,3122,3111,3100,3089,3078,3067,3056,3044
dcw 3033,3022,3011,2999,2988,2976,2965,2953,2942,2930
dcw 2919,2907,2895,2884,2872,2860,2848,2836,2824,2812
dcw 2801,2789,2777,2765,2752,2740,2728,2716,2704,2692
dcw 2680,2667,2655,2643,2630,2618,2606,2593,2581,2569
dcw 2556,2544,2531,2519,2506,2494,2481,2468,2456,2443
dcw 2431,2418,2405,2393,2380,2367,2355,2342,2329,2316
dcw 2304,2291,2278,2265,2252,2240,2227,2214,2201,2188
dcw 2176,2163,2150,2137,2124,2111,2098,2086,2073,2060
dcw 2047,2034,2021,2008,1996,1983,1970,1957,1944,1931
dcw 1918,1906,1893,1880,1867,1854,1842,1829,1816,1803
dcw 1790,1778,1765,1752,1739,1727,1714,1701,1689,1676
dcw 1663,1651,1638,1626,1613,1600,1588,1575,1563,1550
dcw 1538,1525,1513,1501,1488,1476,1464,1451,1439,1427
dcw 1414,1402,1390,1378,1366,1354,1342,1329,1317,1305
dcw 1293,1282,1270,1258,1246,1234,1222,1210,1199,1187
dcw 1175,1164,1152,1141,1129,1118,1106,1095,1083,1072
dcw 1061,1050,1038,1027,1016,1005,0994,0983,0972,0961
dcw 0950,0939,0929,0918,0907,0896,0886,0875,0865,0854
dcw 0844,0833,0823,0813,0803,0792,0782,0772,0762,0752
dcw 0742,0732,0722,0713,0703,0693,0684,0674,0665,0655
dcw 0646,0636,0627,0618,0609,0600,0590,0581,0573,0564
dcw 0555,0546,0537,0529,0520,0512,0503,0495,0486,0478
dcw 0470,0462,0453,0445,0437,0430,0422,0414,0406,0399
dcw 0391,0383,0376,0369,0361,0354,0347,0340,0333,0326
dcw 0319,0312,0305,0298,0292,0285,0279,0272,0266,0259
dcw 0253,0247,0241,0235,0229,0223,0217,0212,0206,0200
dcw 0195,0189,0184,0179,0174,0168,0163,0158,0153,0149
dcw 0144,0139,0134,0130,0125,0121,0117,0112,0108,0104
dcw 0100,0096,0092,0089,0085,0081,0078,0074,0071,0068
dcw 0064,0061,0058,0055,0052,0049,0047,0044,0041,0039
dcw 0036,0034,0032,0029,0027,0025,0023,0021,0020,0018
dcw 0016,0015,0013,0012,0010,0009,0008,0007,0006,0005
dcw 0004,0003,0003,0002,0001,0001,0001,0000,0000,0000
dcw 0000,0000,0000,0000,0001,0001,0001,0002,0003,0003
dcw 0004,0005,0006,0007,0008,0009,0010,0012,0013,0015
dcw 0016,0018,0020,0021,0023,0025,0027,0029,0032,0034
dcw 0036,0039,0041,0044,0047,0049,0052,0055,0058,0061
dcw 0064,0068,0071,0074,0078,0081,0085,0089,0092,0096
dcw 0100,0104,0108,0112,0117,0121,0125,0130,0134,0139
dcw 0144,0149,0153,0158,0163,0168,0174,0179,0184,0189
dcw 0195,0200,0206,0212,0217,0223,0229,0235,0241,0247
dcw 0253,0259,0266,0272,0279,0285,0292,0298,0305,0312
dcw 0319,0326,0333,0340,0347,0354,0361,0369,0376,0383
dcw 0391,0399,0406,0414,0422,0430,0437,0445,0453,0462
dcw 0470,0478,0486,0495,0503,0512,0520,0529,0537,0546
dcw 0555,0564,0573,0581,0590,0600,0609,0618,0627,0636
dcw 0646,0655,0665,0674,0684,0693,0703,0713,0722,0732
dcw 0742,0752,0762,0772,0782,0792,0803,0813,0823,0833
dcw 0844,0854,0865,0875,0886,0896,0907,0918,0929,0939
dcw 0950,0961,0972,0983,0994,1005,1016,1027,1038,1050
dcw 1061,1072,1083,1095,1106,1118,1129,1141,1152,1164
dcw 1175,1187,1199,1210,1222,1234,1246,1258,1270,1282
dcw 1293,1305,1317,1329,1342,1354,1366,1378,1390,1402
dcw 1414,1427,1439,1451,1464,1476,1488,1501,1513,1525
dcw 1538,1550,1563,1575,1588,1600,1613,1626,1638,1651
dcw 1663,1676,1689,1701,1714,1727,1739,1752,1765,1778
dcw 1790,1803,1816,1829,1842,1854,1867,1880,1893,1906
dcw 1918,1931,1944,1957,1970,1983,1996,2008,2021,2034[/mw_shl_code]
|