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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* m3 a) o0 B9 |/ p( z. |9 Q
main文件:
  O  i* \+ |# c/ H& ~6 ~$ xinterrupt void interrupt4(void)  
% M7 r$ A6 {$ o8 s+ P2 Y1 J{1 G& O2 e- A) Y+ ]" \7 i! h% ?
  Uint32 sample;
' S# N8 F3 P' ]# g+ G, n; g& X# l+ L- V3 _4 R* l1 o& Z  T
  sample = input_sample(); // read L + R samples from ADC
) `# I/ S! \/ u4 l, e2 K% T" {+ i  output_sample(sample);   // write L + R samples to DAC 4 X2 R+ c1 f: n- K$ P; e
  return;
2 }) n' o9 Y7 u6 c}$ [; R( L* K$ S" C" o" |/ f; e

4 I  C0 M1 @# y! Z& wint main( void )- j: g. ^/ n, l* G) w
{: w3 r3 b* B8 M! ?; G# {

! a' o/ ]; p9 K8 Y) ]    /* Initialize BSL */
  \5 q9 M; E9 L. C3 h9 Q    EVMC6747_init( );
7 x0 K7 @& r  D: I/ I$ U* t        /* Call evmc6747_intr function */% z. G4 p- M- Q6 p
    aic3106_init( );
" W8 s: z# Q4 ?        while(1);/ P3 n+ L  B0 M8 K; r" J
}
$ R0 M2 f' {* c5 ~+ p
/ l$ C& t& e3 Z- O% ]
. e! M, Q$ H' y2 L( a9 @* Iaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
% m! L; q# Y* [# Y+ `/* Initialize MCASP1 */
' O& d1 f9 B0 a+ n$ Y5 {' L    mcasp = &MCASP_MODULE_1;. e5 T2 r+ Z( t) o& f  g# x
    mcasp->regs->GBLCTL  = 0;       // Reset
7 y2 \4 }* I+ Y    mcasp->regs->RGBLCTL = 0;       // Reset RX; z! [, `2 m8 k# _! J* N4 e  m/ x
    mcasp->regs->XGBLCTL = 0;       // Reset TX, Y" [+ K3 q" q: a# o
    mcasp->regs->PWRDEMU = 1;       // Free-running! d+ A, Y0 Y, T" {0 ]
   // configure McASP0 receive registers0 s9 E" ?1 s, v: v6 K& A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used: c! Z) V: `/ I. F7 W
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% k3 b8 }& a# D' k8 P  ^' [& A: C+ i    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word6 ]- `  B9 y) ]+ o& i
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
) t1 L' }2 k  l0 z, c+ l7 t1 o; d) c    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: ]' ]6 [2 {3 f9 F9 i% a" s" [    mcasp->regs->RTDM       = 0x00000003; // Slots 0,18 `( j6 N' x# Z# ?5 ]4 n0 v
    mcasp->regs->RINTCTL    = 0x00000000; // Not used) P) z# M( [; F( ^8 u
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
( D7 c5 }8 ^6 t) l5 D% m. h3 D- X) w1 P- O1 C2 v+ O; q
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. j3 @1 @5 s3 _4 j! b) G" }    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! t+ E2 X* p# r7 @: t: Y    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 \! z4 B5 G* r& i
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ ?/ S- F) {' G4 N+ {( T
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 F5 p4 U0 j$ O2 b
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1& Z3 t8 ?* j$ @9 @9 D" m
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
$ \! u' h- Q5 G- U9 E9 V6 {8 C    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256$ A6 z& Z1 ~; o

* X# J! z7 B. \& L* s* ^6 l    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. u: m3 |$ g8 h3 T, e8 q# l& z0 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 _2 K0 o, k, W  ]. F1 A9 s8 u
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; d4 T; P$ B: l7 y5 a, [    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1: h7 K2 U+ K* W5 g# t/ i

( V# z$ U1 M. f5 C    mcasp->regs->DITCTL     = 0x00000000; // Not used
# E* l: G- b9 z+ q    mcasp->regs->DLBCTL     = 0x00000000; // Not used% O% R! y* C8 x( i+ X
    mcasp->regs->AMUTE      = 0x00000000; // Not used8 ~% p6 H; r+ R1 v; C0 q# }
, k6 G; t5 ]. g; r: R- J) h
/* Starting sections of the McASP*/% }8 u4 |$ U  u# ?  r
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
! |, ?! I# s7 M7 G& j9 V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  , v+ Z3 y' Q" r( n# Q; B
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& X1 n: Q/ z. I" a( E. K( p# c    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, s9 ^0 z3 R/ J; [" U  h% ~

8 u/ [. B5 E6 F8 L2 n) K    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
! f$ k& O3 E9 `3 g% J) E$ A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );. T. ]" I& v( n% N0 k* i! w
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 6 `* f! o# G0 ]+ M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
( Y3 _  W' B7 O+ m# x' {# J' R7 u7 a5 g5 Z. z/ |
    mcasp->regs->XSTAT = 0x0000ffff; / J2 x0 \, y$ u
    mcasp->regs->RSTAT = 0x0000ffff; ' I$ X0 h1 R# B+ N
, S+ s* ?, u% b0 P9 T6 Z
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ S) Q/ G9 H9 F1 h! T
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
1 u! U; L9 K- H! n# m  l  \    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 5 b& Z! k" Y: J0 g8 J5 o" ]% E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );! `! n, H( Z5 R* x6 ^# c8 N- z

# T6 C% b# _6 K! r/ `" t    /* Write a 0, so that no underrun occurs after releasing the state machine */; h# l# x# O! ?
    mcasp->regs->XBUF5 = 0;
2 J3 n' U: z( \* O) i5 v, y& [    mcasp->regs->RBUF0 = 0;
) A5 U' E/ r- a
) V9 D( N, z3 D" e; g    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
# Y$ k  r7 z" E/ z* x- R    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );- D( K+ S7 x: h# U
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - H- |. F& }4 o8 o) {8 }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
1 P1 m# z/ f9 k  y- c! {8 K6 \
, q( |+ }3 O: D, g5 l9 S" j  n) _    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; ) `$ L" U- M- j, ?% N2 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );* X% b5 [0 M8 |% B3 r) K
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; $ D! v& i; I0 H; w) w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' H5 }5 v5 a4 g5 p+ {/ K/ P+ Q# i. [/ w8 v  o8 t
    CSR = 0x0000;! s3 E6 c  N  [, S$ w9 J5 O
    INTC_INTMUX1 = 0x3d;
& Q9 Q+ f9 Q# W: N# z4 S/ i    ISTP = (unsigned int)vectors;/ o; R; x7 ~( d
    ICR = 0xFFF0;  4 e* j% I1 ]/ Z1 N! h
    IER |= 0x12;  
; n" Q/ R& _6 P9 y, O. W% a    CSR |= 0x01;  
, \; {* Y* L4 b2 }+ H; c
3 b* g; p. p) z9 b. \" C. V* m' ~5 A

; [# q; j  T  c# R" A还有就是两个输入输出函数:
; j6 r3 y) |1 k, Cvoid output_sample(Int32 out_data)- j( A6 R; F! L, [9 x
{
7 M9 Y  `  Y0 w: J  AIC31_data.uint = out_data;  7 j9 }- Y" C# N- Q! l5 _8 V
  MCASP1_XBUF5_32BIT = AIC31_data.uint;  x& t5 q/ _, G6 W
}1 i0 d. p- {  I

' o: ?. Z' t: d4 T7 B( jInt32 input_sample(void)5 V% T; g3 v3 U, d: f$ p5 I! B; ~
{  
* ~+ f3 j, K: n8 j, @$ |  AIC31_data.uint = MCASP1_RBUF0_32BIT;; @! f$ |2 o6 J' _2 _
  return (AIC31_data.uint);
8 r5 j! R+ I* h}
. w/ P% |! U1 |
- Q( V. S! e/ T! l6 G
分享到:  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-11-11 15:17 , Processed in 0.044819 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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