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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; t/ S; p7 H1 I
main文件:. t4 }, G3 E! L" F) \
interrupt void interrupt4(void)  3 ^$ q& ^4 @# \" @0 o
{/ K3 p& x) t" K( f
  Uint32 sample;
- c: d4 E" `9 o+ V
! A( p' d1 Q- l4 O  sample = input_sample(); // read L + R samples from ADC' M- w2 M4 \" V
  output_sample(sample);   // write L + R samples to DAC % k# G6 V# M& R5 D
  return;- b5 H) D+ `) j( M  e
}
9 O5 M0 Y0 y6 D) }# v% G* A0 R* ?; y% T4 w, D  w
int main( void )
; F0 p% I. D' \( @{6 u, F9 v, r  M* o) U

) t  V& t6 d: T  v' B    /* Initialize BSL */& @& y' D8 k0 A# Q& f
    EVMC6747_init( );
& G: [- U2 |1 a. d) J& G        /* Call evmc6747_intr function */
( w& T5 y8 K0 }& r    aic3106_init( );
. {* m* `# t; x" K2 n6 n        while(1);
* _7 z- D" G3 N- U% a. }7 Q1 }}. l! Z* [* V) e

, L/ t% b0 p# w5 L$ o+ n7 A3 m. ^
& U- I8 K: d5 L: Z- R- saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题$ F2 _/ z1 X% W( u. }
/* Initialize MCASP1 */5 F* D5 T! Y  N9 U' L4 p! l* L* B
    mcasp = &MCASP_MODULE_1;
* Y; y; E$ z! H( S* h    mcasp->regs->GBLCTL  = 0;       // Reset6 N7 q- t+ `- Z1 `: [
    mcasp->regs->RGBLCTL = 0;       // Reset RX9 Z9 f4 q- ]2 a9 Y" H1 H5 N( s
    mcasp->regs->XGBLCTL = 0;       // Reset TX
9 C8 x5 y" A  W% {+ b* Q    mcasp->regs->PWRDEMU = 1;       // Free-running/ D6 |4 z( [+ k% E
   // configure McASP0 receive registers* H2 t( M/ [0 a2 B" _$ A
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used$ V' I5 d2 X) A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
) b; N  O3 B7 m3 ]% N$ ?" r    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 E% R: t% A3 c9 g/ d( {" w$ u4 x    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
9 j* X6 Q% V2 `/ w( ?) x* t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 ]$ r5 r! y: P9 _8 m, ~& b7 Y
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
8 X8 M( i, W3 G  A- G. p- ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used
/ [) n0 l! i! S4 ~& O    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' ]* X1 ~7 I# G9 J* T; i
8 G3 t4 d" W; Z) L2 C7 ~6 G
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) R" I7 \6 }+ r) R# d3 z    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- u8 Q3 H; B- n. Q. u6 m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word" M0 Y3 Z( u5 |% `5 B
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
/ C- M% Z, r. j" J    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
5 R3 R! U- Q0 u. _  u- Y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1: S! r0 d# p) h6 ~
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( ^& D! x+ p9 X7 t# a9 L9 i    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 {7 [0 L& Q6 a8 ]! X8 R. Q2 T/ h, n# S; ?6 s) g
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN. p$ ~" M; C$ ]4 l, m4 {. {
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT* Q- K- b% n8 K7 w4 V
    mcasp->regs->PFUNC      = 0;          // All MCASPs
; N* w, h% |/ Y) w6 ~    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX14 q3 f# C  D9 P
" D8 u: O/ w- N
    mcasp->regs->DITCTL     = 0x00000000; // Not used
" T; ?5 g: w  B1 N0 }0 a1 k    mcasp->regs->DLBCTL     = 0x00000000; // Not used) a, k/ u, |: |# k& K9 v) \5 V, ~) ^
    mcasp->regs->AMUTE      = 0x00000000; // Not used
; Q# b2 I9 V  v. @7 X0 ?3 X2 d. h, `- O/ x
/* Starting sections of the McASP*/
( I, w1 P4 L7 _; |% `    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
4 n; @9 o) {8 X7 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ; Y' u3 v8 {; t+ \
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 1 J. [3 k' x" w6 w+ H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
6 D& p$ F6 k! [, w  s! P3 y9 O, Y$ i% q: E" \2 h
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& U6 j- o  P( |3 W: @  C7 D4 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, [; K0 M& @7 b
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
' O( J7 J0 O# @+ G    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
2 ~6 J& z& ^# H1 m2 W
, M8 _/ m! U* r. K7 K+ R    mcasp->regs->XSTAT = 0x0000ffff; 8 i/ `" k( n, @1 F4 `
    mcasp->regs->RSTAT = 0x0000ffff; , m' t- E& b7 n7 _% ?9 d( q! o. y3 j, O

. Y4 q( Q. S1 Z$ I4 T8 p    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! f; G6 G. N; h) j7 e* ~: w  X
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
) \# M# ]' v) y5 F3 e4 z9 a9 B    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   z; b/ }2 {( ?% l. ~
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ U/ e" j  Z- y5 i( p4 U) v5 G4 j
! e8 a# E( h$ P1 X5 ~    /* Write a 0, so that no underrun occurs after releasing the state machine */! g3 I  h' s# x
    mcasp->regs->XBUF5 = 0;" s2 N+ t; d0 U8 _
    mcasp->regs->RBUF0 = 0;
3 _" [2 @& j9 G8 ?
, g3 G! B+ }. N" z: c  a$ x4 r: @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 v' \& \# D; o/ n. |& r2 y. j, g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );2 B" w: q3 H- |0 p7 ]+ e0 z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
+ e1 T( F) v( r/ }8 ?; y  C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
" i" g, T& m& Z7 f8 b5 r
: X4 h0 v) c, ^- N! h4 G: r    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
* A1 |5 b0 B1 z' X* [    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );2 e' o9 Y2 E: j6 M; n$ I- w
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
3 R9 j+ r3 g# G, u2 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );% _" {3 s- {1 ?& Q0 q2 V. D7 O
% M  p" q- b1 b, Z1 u
    CSR = 0x0000;2 H2 h$ a+ y5 ^' O* \! h
    INTC_INTMUX1 = 0x3d;
7 i9 u! O! i2 k8 W$ M1 U3 o    ISTP = (unsigned int)vectors;
! c: O6 U) O; Z2 ~" \6 m    ICR = 0xFFF0;  ' F0 x3 F7 }" y" K
    IER |= 0x12;  % p4 I0 L1 o) Y+ w3 |8 u% y
    CSR |= 0x01;  
1 V3 F- P" [, S' {3 X: `: r' g9 A, i
5 ^$ l' j! W0 L3 a; k* ]0 F2 Y9 ]7 {, B, M. b  V: x

7 U9 H1 @/ j/ x0 M& z7 f4 s% v% d! `还有就是两个输入输出函数:  G+ ^4 O( N$ |" A& ]) \2 T9 y
void output_sample(Int32 out_data); |; p; H: @4 c1 e
{
7 I3 h  z9 q& q+ q  AIC31_data.uint = out_data;  
: k4 m" E9 k3 c7 {) C; I  MCASP1_XBUF5_32BIT = AIC31_data.uint;  ?" m0 M/ n5 D& ?
}
3 U6 U% ]  Q2 ^# o/ P8 O+ @0 b: {9 r# t0 Y
Int32 input_sample(void)
7 e) p: N2 G; y8 H: u; @3 p{  
# t% t4 F2 \+ Z! A6 T7 C  AIC31_data.uint = MCASP1_RBUF0_32BIT;
# ^- k# B. d3 }  return (AIC31_data.uint);
) v% Q2 [; d9 `, }/ |: R$ N* e1 K}
# R7 E: D% Z- n4 G$ Z* l) Q
$ v/ i1 v! C- Q; @/ }- 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-2-26 18:26 , Processed in 0.039255 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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