C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6280|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:$ P, k. k6 o, E9 K, _
main文件:* P9 B+ u3 Q0 M( t. I" [# r
interrupt void interrupt4(void)  
8 f( t- F1 j7 x, Z, x{
6 ?, j$ q- U+ c8 g/ J, I  x) ?, |  Uint32 sample;) }& \; K" e0 r- H

; w* k5 u  l% o  sample = input_sample(); // read L + R samples from ADC  W5 i9 d" f) a2 s8 N. H* ]
  output_sample(sample);   // write L + R samples to DAC
$ Q: m, T) b  B! O9 p% l7 d/ e  return;* W& t. g( u# f, q' o2 b; T" x
}3 k% s) U; c1 D4 O7 u; F

( J* K  H! e) A6 O$ dint main( void )
4 O! F! t7 `. s  b{4 o1 `2 A5 P$ @' X! x5 T
6 |/ _& H. v2 Y; A. D7 c# V' X
    /* Initialize BSL */5 s# b& S# y3 V, F8 D
    EVMC6747_init( );
( A( F& u: J* X' F/ `        /* Call evmc6747_intr function */
0 W# q6 x" R# v    aic3106_init( );, t. O8 h  z' A, Y
        while(1);5 z; Q. s2 P- v- N% J
}
0 Q. u  ?! x. x, r3 N; v
+ P: N" k- x8 m1 _1 ?
6 Z3 ~+ d$ \6 i& ?3 D% X/ baic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
3 n% C3 Y0 F: n; A4 H- T) |/* Initialize MCASP1 */* T5 Q/ B1 M" m  `% ^5 g0 _( ]
    mcasp = &MCASP_MODULE_1;! |8 y9 J$ f$ u7 m% |# Y/ X7 c
    mcasp->regs->GBLCTL  = 0;       // Reset! J! U& y8 e2 n
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' `0 Y: X5 p( ]" y    mcasp->regs->XGBLCTL = 0;       // Reset TX, B0 J% y; ?7 \/ ]( U! ?5 `0 e# g0 L
    mcasp->regs->PWRDEMU = 1;       // Free-running) R2 a: h' w4 u* j8 ]5 Q* D
   // configure McASP0 receive registers- Y% K* Y% D/ H7 p8 ^0 i! l( z5 \- B
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; E+ X0 B) {3 }9 o# ~    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; t/ V& H& V- L( k3 ]& e' D/ w% Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 w' |5 p. c: v- u, C- T    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* {  t( X1 C# W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)! x9 {' |3 x7 }# e! q  P+ K
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 ?3 S) s5 T  u) c0 [8 K1 M! M( S
    mcasp->regs->RINTCTL    = 0x00000000; // Not used9 ~5 f. @; E. ~' Q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 N& E) ]2 d6 c1 b
' s4 _" ^$ \! C6 }0 Q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
& G$ v2 L# W) ]/ g+ l4 ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 @, n2 W4 B; B, q( _7 ?' e
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) w) a& K- V& [+ F8 `# R3 c
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 G; ~. d5 P" x9 X; u' b: d8 A  F    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 o! `  o5 t6 u+ c8 s0 {7 X6 L4 j5 v8 X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( a' B# U4 Z9 {
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit0 n; f2 p5 W* X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 o. J; C3 r6 H
! n% V6 ^5 `: Y% g& }+ r
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 W  F5 k" G4 L6 U# }& ]8 i    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( I# w5 L; D+ R) N. g/ M
    mcasp->regs->PFUNC      = 0;          // All MCASPs) r8 x( i7 S3 p+ \! r$ |$ T  |
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX16 j3 ^: L; t8 n6 E
# y6 z0 g/ D" R/ B  T
    mcasp->regs->DITCTL     = 0x00000000; // Not used$ J  a/ h7 I9 l9 R7 @* j; S7 Z
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: i3 B6 Z2 \% ]( w
    mcasp->regs->AMUTE      = 0x00000000; // Not used
! n6 i8 l) O: |0 d# _# Z+ X* a7 ^, E8 [' v* ]2 t% s3 e4 ], m
/* Starting sections of the McASP*/
6 |7 O: y7 b* n3 Z. ~+ A4 @* G    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
- |- J1 e* \7 v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 f0 E4 p+ g" \! b$ B3 N, y  p
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 x0 j! s- O$ P* v5 C# M& e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
9 i' Q; G3 X1 }7 E6 m( \7 n7 w% u
2 S, T, q' c# ?3 s    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( j' ]8 O5 X) [, C( ?) f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# Y9 b4 I2 ^& o' G; n
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 4 G9 Q* \4 J5 C0 D* q2 ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ y. U% W2 f+ n0 a1 \

4 B. w( O5 I5 u    mcasp->regs->XSTAT = 0x0000ffff;
% n+ w9 K( r1 U' x( z    mcasp->regs->RSTAT = 0x0000ffff; $ h, c  [7 L" O9 }& x; {
$ q- e/ R8 |% q$ o3 Y6 G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;: U) W% ]: o, a; B# ?; N  t
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 L9 t. f7 }% l5 |
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# C, s3 o9 o4 E  e7 F    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! |5 u: ?% N, O5 g+ |; d
6 ^8 |6 E) F; @) ]
    /* Write a 0, so that no underrun occurs after releasing the state machine */1 M- t. h& {) F3 A" ~5 E: e
    mcasp->regs->XBUF5 = 0;
7 S' I9 Y3 ]! K. b& E' L, G    mcasp->regs->RBUF0 = 0;
! _* d# |8 T- y  `! [$ V# a; G7 L* x; m
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
$ ]2 U1 J2 s$ {1 D* N7 K( ?    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' B. ]0 [3 @) M) B: F! Y  |    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 l' L4 A" E0 e( c! ^  K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );: O& B- X- u' |+ C$ h4 P
" K' G5 g8 n  ?4 t
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) Z; Y0 U: f7 ?, `2 y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
3 N$ R( B" M& Q/ d9 t- W    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 K6 _& O( H( W2 u0 ?7 |" U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );# O- I. K7 G( W. g

1 y* K7 O5 g0 C4 r! u; K    CSR = 0x0000;" P# R7 K( z) R9 ^
    INTC_INTMUX1 = 0x3d;
# H7 o  Q# w4 X1 h1 J+ I    ISTP = (unsigned int)vectors;+ u9 I5 Y* d8 [! b8 M9 ?: o) {
    ICR = 0xFFF0;  
. m0 m3 R9 S; b0 e' p2 b: e  ?    IER |= 0x12;  
; V3 H8 W' f* R  C    CSR |= 0x01;  
* @; e+ u0 t6 y! r6 Q% p+ ]5 u' M- Y2 z# \
+ P# t0 t4 ^9 u. d: d

8 s7 W( Z/ g2 |6 b还有就是两个输入输出函数:
$ a6 N: \7 A  j  I& Fvoid output_sample(Int32 out_data)8 O, Y& _; g1 r7 o8 [, N
{7 R1 W) V1 k4 T5 r/ v8 N1 M; m1 k3 |
  AIC31_data.uint = out_data;  . @  I$ _  f+ I6 P1 a
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* J7 [/ s2 N2 X) C6 u}/ p! _" |1 V+ Q
+ D. ^( F  b  _, Q* I( K
Int32 input_sample(void)8 F5 a9 c$ T' F8 D
{  . T2 C0 U; O6 r% Y$ _
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 F: P; v5 A9 }9 f* a1 G, U  h  return (AIC31_data.uint);& }5 s9 P9 h* O# U! A9 h/ m  O
}
) G+ u8 n, p3 @7 `5 {3 e5 s0 n' b, B" x& U+ o5 l1 U: y$ f
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-2-11 15:16 , Processed in 0.048173 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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