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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
$ v0 o$ \/ k+ r. S: R$ Tmain文件:( X" w- m# L2 z7 a$ J& M
interrupt void interrupt4(void)  , W1 t3 V; W5 J% L! H% x* Z2 F
{
; O& h$ D; z+ t+ f4 g" O  Uint32 sample;
% N* {' H1 q/ |  \" B
) |  _4 Z* a3 D) c8 a0 k  sample = input_sample(); // read L + R samples from ADC
! F# A% ~" X  `, m9 l& j  output_sample(sample);   // write L + R samples to DAC ; O$ d, T7 }4 n8 y
  return;
8 v: t4 F/ [; e  O( P}2 h  B6 j0 \7 c+ O

! M7 R, t; r% {3 Rint main( void )
$ A  w7 m: |) r: B{% d8 a6 l1 y3 m; q+ d; w) D# {) q6 }
) {2 i" o4 W* k4 Y& l
    /* Initialize BSL */5 C+ L) a* P2 B
    EVMC6747_init( );6 N8 n9 m' f) b( M! C& U
        /* Call evmc6747_intr function */& e, O# a7 Y) l8 C+ @
    aic3106_init( );, I8 J* J9 Y1 q2 a( G2 z
        while(1);
' s# U. |3 i: N, v8 Z- C}
0 k( d" J! _# v+ v2 r( [% V* [+ Q$ v$ j, `1 N0 Z" G& M
1 a( P, f; [8 {7 l
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题1 P: H; z+ A! M' R0 u/ `. v
/* Initialize MCASP1 */, M) F/ X# T& k$ d* E
    mcasp = &MCASP_MODULE_1;* }& ?1 C8 y4 N& l, @
    mcasp->regs->GBLCTL  = 0;       // Reset& k! u+ [( C' M0 O+ ]
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 i- F9 `- u& ]- b. ^
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- [' I$ D# {3 ~9 y/ g, ]    mcasp->regs->PWRDEMU = 1;       // Free-running
8 F' x! V# Z5 ?% J9 o  U& K( a   // configure McASP0 receive registers, k: L' V/ \* H. w6 O) L5 o2 I+ z  x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  h/ q' z' K# D* m0 L    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 \5 E' a7 [: V4 o
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, `, J. q5 ?6 ?8 z8 J& o$ E6 J    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)" q6 [4 `# K2 L% _+ B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)6 h/ f1 I  U' {" i9 N
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1/ `4 n& u6 [  ]& e# @
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
) F7 M, `) ~, _# n# P    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
3 J$ u7 H, O8 n( ?# V
' {4 ?; l7 v7 ]9 w" c    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
7 w* y% }" T6 S; \! Y1 P    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus* ~$ g  |$ q% N% M
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word) S  D8 F6 |. s6 d3 J& p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16) m& B7 @; Q: e8 R' s( _+ ?/ I0 a
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 e' D. Z7 f) ~1 H2 E6 ^1 c    mcasp->regs->XTDM       = 0x00000003; // Slots 0,14 e! N# a8 e4 l4 ]* N" Y0 I
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit7 I  L: m* s; y& m6 ]
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ h# V' x  b% W, _" i
4 o$ L6 f% p, W$ N0 W    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, g9 m7 p. [" O. @5 a6 O7 Z7 \) b1 m
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
0 g* @5 t: [) i6 ]" M' X# F    mcasp->regs->PFUNC      = 0;          // All MCASPs
* ]2 J/ v+ e3 ^3 S3 X& P0 p* F    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
( X- d# R$ K0 O! J$ k0 S8 a
9 B" e+ n1 ~$ p( [    mcasp->regs->DITCTL     = 0x00000000; // Not used& p) `. b) z- u- M5 x
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; U3 D. j# Y% m% y) y    mcasp->regs->AMUTE      = 0x00000000; // Not used
8 P8 G, s* q) C7 F( b5 ?6 d- L1 ?+ ^, d' D# H& {
/* Starting sections of the McASP*/1 N+ g5 t5 k4 N) v3 \
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
( |7 J1 z7 @( A" Q2 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) n$ [2 J. J( W* ~0 E/ s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
4 M. ]  B+ \0 f( n1 D6 e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, T% M0 t' A/ H: C* x1 s! k

# T; F: O7 [4 E! M    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 2 P( C4 U* f6 q
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( m( D$ w  m4 ^6 J0 J* i6 L7 o/ K
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
1 M) |- S! s# T* C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" ^* V# ?+ c' r
$ |5 a9 V' U, x3 H: m; g0 M    mcasp->regs->XSTAT = 0x0000ffff;
% T' n1 l; i* s. P    mcasp->regs->RSTAT = 0x0000ffff; ; x0 ]2 P  S# w/ m/ Z
$ t& f, m- U- |3 Q8 B
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! K& V' E# j( p0 }) w1 k/ v. L
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );4 p/ }0 Z7 G+ ^0 d# T( v! J' i
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - U% W5 _5 [# N; z" g& b, V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );( H6 S6 k- d: o' o. X0 Y+ j

: p2 R9 x# u; u9 y9 a    /* Write a 0, so that no underrun occurs after releasing the state machine */
4 g& y6 C, h6 H+ r  K4 I0 F    mcasp->regs->XBUF5 = 0;
0 j1 X  J9 `4 P# \, q0 k    mcasp->regs->RBUF0 = 0;+ U% B9 F- |2 K2 U7 u' G& x
- l2 k" r  p- a) W& d% D4 e) Y
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
5 N3 ^; [+ ^& @- `2 `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );& {) L' p: C$ m
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ n" f* v# A- e# N1 ]# z6 w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
+ }( c: L& U- U4 f8 v- P4 I- ]) r7 ?& E, c; U3 K
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
) c2 v8 ?0 K) N# T0 K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ E) v9 |* d& `5 m4 ^
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # n  V; g7 _( D) X: X! Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );9 m7 ^# d% y' Y# j8 l$ ^1 c7 N4 \
5 Z( v* U* b- [. v( G7 I" D" w
    CSR = 0x0000;
( D: @, q0 C! J- b6 M2 r$ T8 [7 H: G    INTC_INTMUX1 = 0x3d;: [6 D- j6 c. z! S9 g- U* _
    ISTP = (unsigned int)vectors;: d/ G' B& I8 G& k0 B  L4 a/ R9 k( W
    ICR = 0xFFF0;  8 x$ V: [- V8 p) V; v8 d( _
    IER |= 0x12;  / z6 e5 `% H: x/ i
    CSR |= 0x01;  & `5 b0 V: I, |1 i& ~
. y. }- U4 [1 j5 P  K5 n! i1 O. a
! n' I- L5 @& w* x

0 T4 A9 `% j+ z$ H  @: v; Q还有就是两个输入输出函数:
8 i" v2 @" r7 C2 J  g1 j/ ovoid output_sample(Int32 out_data)) l+ a! W3 x; c& M* O3 V1 W3 S
{
' r6 P: h) c5 b: c  AIC31_data.uint = out_data;  
% _* ]# r5 v3 f8 U0 M  MCASP1_XBUF5_32BIT = AIC31_data.uint;5 d' W, y" |; X! O
}
- D# j7 B" K! d2 x, J+ L" z2 V* u5 R( n
Int32 input_sample(void)- i, r2 p  s6 y8 v" a" c1 K
{  
# q1 i% |; O8 g* ~4 X$ O' m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 Y( S" E+ u7 n5 F4 j: n  return (AIC31_data.uint);& p- \+ g2 N  T" M2 N
}
' O; q% d- c2 O1 e) t- {7 ]+ f5 Z  _, d" T8 B6 K% F% Y
分享到:  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-1-15 03:43 , Processed in 0.040757 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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