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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
& K, F4 J% g. p: a" V9 mmain文件:2 q' Z' [4 H1 ]! ]9 f( Q% D% S
interrupt void interrupt4(void)  2 v2 y4 P% S3 ]# L7 b4 U
{
" |! H2 ^& {$ z  Uint32 sample;
/ A* y! K; G& e0 \2 w7 ?4 t. w' {4 ?* u9 N" J7 i
  sample = input_sample(); // read L + R samples from ADC2 b8 v, p$ q2 M& B
  output_sample(sample);   // write L + R samples to DAC + j- B) h7 g! h, K/ ?2 F
  return;+ G6 U) a" s+ R5 L5 E
}! s; j5 T, Q; g$ Z) M- f

, |/ J% R* b( _( J4 g9 A4 i. wint main( void )* L) K" _! a( t/ o2 _% d9 \
{
- [8 |  K$ g& ^: k4 M0 M' M8 h# _! o& y6 d
    /* Initialize BSL */% v( Z/ I! p& x. L4 ]( g+ H
    EVMC6747_init( );
/ N. E! ^6 H1 V7 n  s        /* Call evmc6747_intr function */9 Z$ Z$ w& q2 E- u) K* C
    aic3106_init( );" H$ r, a1 ?" R" i3 X2 {
        while(1);
* H2 s% T1 }! y. y  }3 D}& v, H1 i5 Q' Y, ?) [& A, p+ m4 {9 Z- D
- D6 D2 N) u. [& ?* M0 B2 g. Q+ F9 S
& `% U2 a! a# ], v- I
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题+ U5 }/ F7 n, I& F
/* Initialize MCASP1 */
6 b- e$ s5 D: U0 @- G    mcasp = &MCASP_MODULE_1;+ @+ S  b( ]' ^' b; f
    mcasp->regs->GBLCTL  = 0;       // Reset! |  Q: @" J) Q% J1 @
    mcasp->regs->RGBLCTL = 0;       // Reset RX$ ?6 A8 T8 m$ u7 _& b
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 E& A  }) s1 y/ U  h    mcasp->regs->PWRDEMU = 1;       // Free-running
2 g6 D4 V$ h3 Q! s/ K2 ^; w2 \   // configure McASP0 receive registers+ |5 L3 Y8 [& k# M$ ?9 }& @4 S
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
9 z) ?, F) k8 U, o6 s    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 q* ]7 Z) \+ g3 O4 C6 e! `3 Y
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word2 L, u$ `6 ?+ J6 o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
/ y1 j* c4 B' [' |    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 P- p6 X7 O- e
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
. E1 S& z2 j" d8 J" x    mcasp->regs->RINTCTL    = 0x00000000; // Not used
8 M; ^  U: c, U( a; d" E+ V0 H. y    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
2 t4 [# f$ K+ i( t; V0 @# r
4 ?2 g; t. ~5 L. y; S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
. X. D/ K% _* ]    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ H8 S8 s1 h. y
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word% H0 k5 m2 h# A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
; ~9 k) b  \9 H) ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
8 L) R2 s; \' o( d# R" U7 J7 i    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1/ x- h; u! B1 c6 b- j- `
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit6 S# J1 P; j" g3 P1 R$ F  ~
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 O# ]* ~. t6 ?. k$ N5 b% ?
# P; \* A) h, D& |6 `. j    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN4 f- L% H+ j9 K7 Y7 @( l
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT8 }. O2 C0 `4 K+ [! e* o# p& g) Y
    mcasp->regs->PFUNC      = 0;          // All MCASPs
, n/ j4 B$ Y' D) k    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
* W$ ^  Y4 j# Z" l- D- s8 f% a8 h) s8 `) W  |, `+ {
    mcasp->regs->DITCTL     = 0x00000000; // Not used& q+ s# y* ?3 l5 ~3 b; {
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
1 x3 p+ M. a: g# y! S6 x/ c    mcasp->regs->AMUTE      = 0x00000000; // Not used
  {! ?7 j$ E7 N* u$ Y7 G$ ], `  o' i1 D6 Y; O* X2 `/ s4 y, x: d! V
/* Starting sections of the McASP*/
, @: I0 j/ m  v! A* }" ~( j4 |    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* W4 H0 b. |& @4 [. O- Q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
2 Y/ S) r$ z; N: b' Q8 D; e3 `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: t, N2 \1 c+ `# m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: @7 v$ s: l' h' S5 q4 J# C* w$ _% t' ]

) T" a1 l" l0 s, W0 Q    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ; t  O& |3 f- _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
5 e5 {# h- Z) H+ h3 s: J( w    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " U* z! l1 a. S+ ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
9 J% e) J. ]% L( Z$ l/ \: ~0 h, w( I9 g( x- U  X/ M) X
    mcasp->regs->XSTAT = 0x0000ffff;
! Q! Z# }' _" g% `/ G  E+ E    mcasp->regs->RSTAT = 0x0000ffff;
  n5 A8 X9 M4 i+ v7 j8 K5 l( x7 [2 K: @) G2 `( B
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( F3 T1 p( n& Q* o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
% M& K" g0 O4 x5 g! F/ A$ h/ a1 k    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& L+ `$ `9 [2 T& s' H$ b. d& T    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
# ^, _; d7 b1 M, b6 L; h
$ N5 L0 t# t$ f7 w$ U1 L5 o0 W    /* Write a 0, so that no underrun occurs after releasing the state machine */* b. B+ f, t9 V' x
    mcasp->regs->XBUF5 = 0;
0 ^+ S* T2 g) r    mcasp->regs->RBUF0 = 0;2 h8 K6 @& u; _; a; i+ h# V1 b

& j' B$ n- k7 E. h+ n% `1 @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 2 I8 U8 @) x4 ]0 o* P
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 Y- p- R$ y) ^4 `* o
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 W) y5 U; a# q# u! H    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );* g6 }0 T2 G- O
. @8 T4 P3 v# n. q0 t' K% ~
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " N- G8 J% w5 Q2 {( T  d: z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );' _$ u, A/ Y/ r& W7 q; S- ^0 r
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
5 a- O& O$ v$ K8 h3 X2 M! A% K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
7 G2 ?0 X! {6 R% N' T
4 l/ b4 X* X9 H/ c    CSR = 0x0000;/ F$ P0 K" }' |' B$ P* v
    INTC_INTMUX1 = 0x3d;. v8 m) Y$ j/ B. Z, s
    ISTP = (unsigned int)vectors;( ?9 q: s( {: F/ c5 Z
    ICR = 0xFFF0;  4 C5 u( i2 v) w1 |5 ]
    IER |= 0x12;  
; Q5 i- Z5 M# ?' K( d3 J    CSR |= 0x01;  3 V4 d+ x% |7 J4 `# f) v$ |5 C
+ G5 d/ O, [! E% g# d0 e2 V
' O' t" w9 `+ r

; G& T1 Q/ v% B' P" ]# J4 t2 |+ R还有就是两个输入输出函数:, R' L3 Z1 b' i* Q( y
void output_sample(Int32 out_data)
. q4 S8 L3 }& V3 ~' P{- a4 U3 A& P$ |* [
  AIC31_data.uint = out_data;  . Q; q9 u, H" G! m% F+ }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, R/ r& R4 ]* m! l; [4 n  N3 H% r* z}( z: }# O# l: @3 x
& K7 O% a& W! l  d
Int32 input_sample(void)
4 |$ V; p# f3 u: z' X/ `" `{  , f" S. R5 ~3 b5 U
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 Z. D& F( v6 g4 V
  return (AIC31_data.uint);) E8 }  j% B! t% ?& T+ [1 W/ q8 h- ~
}& l, V0 [. L5 z2 u; v' m2 C

7 t- D5 L* h! m6 k" ?" P6 r
分享到:  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-3 11:03 , Processed in 0.038504 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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