C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  n! [  B# w/ l/ v2 j2 j+ M1 {/ y1 wmain文件:
& @( ?- S8 X1 D: U8 L! q% z5 Hinterrupt void interrupt4(void)  , Z2 v5 P: K4 }& q1 [# I1 H
{
8 w+ O. G$ y% R  Uint32 sample;. g/ t, L5 P. R" k: W
& ?+ E! p* d2 a  }
  sample = input_sample(); // read L + R samples from ADC
3 |2 x- O6 y. A  output_sample(sample);   // write L + R samples to DAC : A  H- v& B5 A2 z" o
  return;. Z" g/ l' o- j2 \& l/ z( B" p
}; w' b( n  i- Y9 j, H' B/ n
' k2 J8 p. ]! }
int main( void )
0 g3 |" n. w6 \3 A{
+ i. a, e$ J% ?8 f# N# c& t
2 V7 {$ o8 [* e( q6 ^    /* Initialize BSL */7 ~9 K6 z! ^9 J, u5 m
    EVMC6747_init( );
2 M5 X1 D# i5 [: ], @* b        /* Call evmc6747_intr function */
6 O' I' W! e" A; T6 S1 o  Q    aic3106_init( );
, ?0 U- U* C! w4 C8 s- n5 H        while(1);
3 k5 C0 [) u* z; b& X! p& s}
6 u- Z5 q% c# Q/ D% ~
( c! g4 P- V8 J9 z/ g5 y" W/ i4 u! S* h
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
8 i% b6 F  }: q& B1 a2 B7 g/* Initialize MCASP1 */
( m; t- ?7 H; g" h8 ]- D/ p+ V- Q    mcasp = &MCASP_MODULE_1;
+ f% @/ w& k1 r5 m( i+ s    mcasp->regs->GBLCTL  = 0;       // Reset' L/ r* ?+ h1 l) G
    mcasp->regs->RGBLCTL = 0;       // Reset RX  n2 r' O- E0 V4 _; _/ s7 O. c, G( S
    mcasp->regs->XGBLCTL = 0;       // Reset TX
/ c6 L/ D' f# e0 b8 n    mcasp->regs->PWRDEMU = 1;       // Free-running
5 U) Q2 j, V1 z, H' r- S$ b   // configure McASP0 receive registers8 u: P" `' l) l3 p4 J
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
' w. x% K: T$ T6 m/ k7 ?    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& [4 ~9 v5 j9 O  M8 s4 Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 U& z9 s! ]- @. l( R6 v; U    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side); s! k$ w% |8 d( Q! b& e! g
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; A  l. }5 q) \+ c4 P- U; X+ C    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& Q. z# d  @( O* Z
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
0 f; R- q# e- `) N( `    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 I" G' Q) e" _* l& _3 \. D( r
$ I: m- ^6 i4 a
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 T$ @: t; D7 m4 u5 N* B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus7 W' c. r8 I3 K2 j, T
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word& n2 e  f2 d4 c+ ^0 M
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-165 v4 V, L  _2 M1 J
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
6 g  i% B# G: G% m8 M9 @    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
4 e5 B8 Z$ _5 R4 W: s& ~' ^' V. }    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! |; Z" a. m, d: \6 n
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ a7 Q# ]8 a4 C7 t2 t
- s% x$ N- ^: `4 z7 ?* h    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" C3 K% i! v1 s6 d4 x6 k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
3 Z% B3 X2 p- z    mcasp->regs->PFUNC      = 0;          // All MCASPs
; g* C$ S' V- \( \9 R0 `: I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' Y' R8 {4 X' \: t8 G) `- u- {: q* j. Z2 g1 q
    mcasp->regs->DITCTL     = 0x00000000; // Not used1 S1 m; S" S$ X# p6 S! \7 M2 S7 o. _$ h
    mcasp->regs->DLBCTL     = 0x00000000; // Not used0 f; [$ w  X" Z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
$ p, V) q% F$ m$ g) v3 S9 d2 u3 ~7 D7 J$ h; K
/* Starting sections of the McASP*// y& c+ u7 a8 j# b
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
  K% `, B4 @6 y/ k* G9 a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
" Q+ n+ v9 g/ p# k5 j- w    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 7 S% h7 X/ f) O/ U) N$ x1 z5 N
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
1 d$ O* }6 s3 F3 c0 o+ K: y
4 G+ a4 _7 L+ e$ G# {% @    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
+ A) r9 ^1 h' Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' e3 a- z' ]& J# t' k
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # F. O  q: w7 t, C+ B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 h/ \7 ]( I; {+ C: S; O; h/ a5 \8 k8 X; Z8 Q
    mcasp->regs->XSTAT = 0x0000ffff; $ z' \0 @/ y5 v! a3 }& ~
    mcasp->regs->RSTAT = 0x0000ffff; 9 }8 h8 T! S( F' U  o1 n! V) O
/ u; d3 x" {. W$ G7 @3 V! N
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;1 `3 @0 O7 m/ U4 A2 t5 a1 w' ]$ d& P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
" X/ p0 v: H/ g- W# @% `    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 a- u4 Y- m2 h7 G: a" s9 K5 I! z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );) J0 y$ o9 k% r& o0 k* p
8 g2 ~( X; @- B$ M1 z3 `# a, [
    /* Write a 0, so that no underrun occurs after releasing the state machine */
7 W4 O" E& j! ^5 W    mcasp->regs->XBUF5 = 0;
/ D0 E+ Q+ a+ C- N    mcasp->regs->RBUF0 = 0;, d! {  \- j: w( d- Z: Y: J
5 q- k* K: s" \! w9 b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 4 z" O& J4 {% _' K, ]8 J/ d$ b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 Q* f3 z2 E" U# V7 P, q8 J5 }& W    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; . J7 C0 l  y7 t8 ~* \4 Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
( ^+ _2 i4 \7 P3 a; s( \; j/ T6 R% l( x5 m2 I- C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; * l' l7 E. z! v! q! O. H! Q: L0 d
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' i" K9 b) W* o- R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 7 N; b" R. X6 M9 m* I) O! ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
& I6 A. E* o1 r$ B9 F, Y0 J& ?
; r; s5 q1 ^& q$ g    CSR = 0x0000;/ m$ n2 _$ ?6 X& ?
    INTC_INTMUX1 = 0x3d;; W1 E8 }+ E- ?/ J6 f- t4 T
    ISTP = (unsigned int)vectors;
4 h* \* u: B$ N4 J* ?    ICR = 0xFFF0;  ; m+ T; Q: @# f/ x  m
    IER |= 0x12;  9 b1 s- J% z" e5 V
    CSR |= 0x01;  3 t7 W* c# c4 \7 F
+ Z, \  R+ O, {6 F
& ?: t$ @& }9 l5 S  x

& x! O4 ?0 k% I# W* k0 _5 A! P还有就是两个输入输出函数:2 q' {9 H% ^0 M) s2 q( }4 `
void output_sample(Int32 out_data)
! T7 V( G9 o& H{- x1 S$ w5 j' R. O# T- f) l1 p
  AIC31_data.uint = out_data;  1 A0 Y! s9 N/ @2 A0 t
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
5 c; Z2 c% A  b2 J" _9 Q0 X" e" P}% t$ g, u5 F) ?# H

/ B. Z1 u9 J6 h( \# D3 a0 L5 [Int32 input_sample(void)
2 G7 B+ R4 ], ?: c{  
- G" O, U3 K& N5 X; w2 G9 Z  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: ~) O/ P0 q" D/ m  o  return (AIC31_data.uint);! u' W  G3 E3 D) j
}
( [  h- y' D5 y: U: p6 ^- l+ p" k- t& s8 w8 \! Q$ |) Z0 |
分享到:  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, 2025-12-5 15:52 , Processed in 0.040745 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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