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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
0 \8 }$ C5 Z) C' Fmain文件:3 ]- k5 h! F' R0 B, r7 r6 h$ b
interrupt void interrupt4(void)  * U; N% x4 M! W  R& F
{$ ]% w6 N' t) C" X
  Uint32 sample;- u6 Q& Q6 ]" Q
5 Y# C  u$ F6 E- c
  sample = input_sample(); // read L + R samples from ADC! s; C1 G' z+ ]* v0 `% i
  output_sample(sample);   // write L + R samples to DAC * C4 h- H% L  X( `  `& t" a( F
  return;
' g* N7 v7 [9 f9 O}0 s" g! Z& P& a7 {* Q( m" k

1 X8 l2 N+ L' Rint main( void ), S5 H% m/ _6 n. y2 l: R
{6 @: E; z2 v  N& O. t

( B9 S6 D6 `: R) Q    /* Initialize BSL */# e3 T5 ~" q# M5 p8 S
    EVMC6747_init( );: f" H( ]" n- N- i" Q6 G
        /* Call evmc6747_intr function */* R; K; O: ?$ l3 k; o- P
    aic3106_init( );
; c8 H; D! h% s        while(1);0 U7 O- \+ O4 T0 Q
}
) h6 ]  D/ f1 q  |5 `' ^- _8 O, }6 H4 O+ p

4 r: Q) f; G/ Saic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
. j. U2 o5 n' D' U/* Initialize MCASP1 */
4 A  L" f9 A7 o4 N    mcasp = &MCASP_MODULE_1;
6 E* P# z4 C: ?; u: v: C8 b& S9 A    mcasp->regs->GBLCTL  = 0;       // Reset
6 R) l# M( K/ v    mcasp->regs->RGBLCTL = 0;       // Reset RX2 P" L! I& a6 N- A9 B8 }7 @5 S$ k
    mcasp->regs->XGBLCTL = 0;       // Reset TX$ F) q" h* f, Y5 `7 }+ `/ M
    mcasp->regs->PWRDEMU = 1;       // Free-running
; _2 u9 {# @" F  |( }0 a7 F7 n: [# o   // configure McASP0 receive registers& t. F. S2 d4 H
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 `, j" {4 v# T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
  A3 U6 i3 U1 t0 u9 u% y$ Z    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 M0 d9 E: Z8 H0 `
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
# j+ E! ?3 E; v' K' C# s) t0 h. }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 ^* N* z/ p& g( G1 y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# u& \# x2 l9 p7 j- I; W% _. h
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
* ]/ R* R+ m9 U) S3 V9 a9 m: I6 ]; _! W    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 Y' `  N; H" f4 B. h& B0 u& I. o9 s; m  u6 }3 Y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 X% l/ ?; U0 `0 D; d    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
; q- l5 O+ w$ N8 P% L5 V9 q    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word  H# w, ~: a# u5 d) K
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ b/ H) q5 l/ P7 \& x! U& j9 r
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( s9 U5 {/ S. X    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
$ a: q* G; F% Z$ _$ Y4 Q8 u5 K& X    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit, C8 [' M8 {4 Q. d5 n1 W9 t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: y) \5 T& r% h. v3 d4 I2 K/ {- D9 x3 u8 _$ l2 \
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN$ u2 \0 y( o( U* i
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT1 |# a% F2 W- Q, q( I
    mcasp->regs->PFUNC      = 0;          // All MCASPs
$ }/ o; q5 G6 u( K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ m" `2 k0 o1 v% ~+ F. w( a
, ]3 W9 V. c! Q2 B6 }- }( h  R
    mcasp->regs->DITCTL     = 0x00000000; // Not used
' {, G# M& l1 z; R    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ L* Q# k4 Z$ v7 f% `5 F% @) @4 P    mcasp->regs->AMUTE      = 0x00000000; // Not used
7 s! d& r+ a; t7 T3 f8 E) f4 h0 U# i6 \" o
/* Starting sections of the McASP*/! F" Z7 r+ E% T4 e% m
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
' @/ k' `/ p$ g. T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
) B9 [4 ^( j* h% e% u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& m: D8 S3 W2 q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
& Q3 P3 ^% g! |& o. [1 A2 \  B* x# U# `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
0 @+ \+ Y& y* b. r- O" v    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  C; [2 h. Y$ d4 C    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ }; F* g$ T( V1 e1 P    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 |" o4 ?0 N( D) A' j* n4 ?" D; z* b# R) p
    mcasp->regs->XSTAT = 0x0000ffff;
4 N% H2 o* g+ z2 r* ^# }( s8 z    mcasp->regs->RSTAT = 0x0000ffff; ; a1 g& X* Q8 N1 r" F0 p1 x- j9 f
8 t4 [% x- K$ p- {" E
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
1 ~% z  c, B$ l. {4 B: E    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
+ B: Y4 L4 W  h4 y( C4 x3 s3 T  g    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) _- q1 j: E; G0 m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
" L& ]: a! N5 l1 n/ S6 a1 U
: E3 S/ `) j0 r4 @$ h    /* Write a 0, so that no underrun occurs after releasing the state machine */
' ^7 R4 h0 w8 K% @, ^# R1 n  z    mcasp->regs->XBUF5 = 0;6 @) f7 m4 @' k5 q3 h
    mcasp->regs->RBUF0 = 0;/ O' r' M5 @5 U0 B

) a5 j7 ~  i4 T+ r    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
- b3 T8 t0 |/ E0 M! s2 q8 m    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 `, q- p0 N+ X    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ( ^: |" @3 t2 S( G* n, U$ p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );) [7 Z/ k4 `8 _/ X9 s1 @- S

& `9 U- V2 L' n3 ]! ?    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
1 F0 l2 @8 F% v0 s    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
9 r; x; }$ \! D9 T, w8 p    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
; k! u% M3 x, X8 W    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
' N# a9 \' [/ U  K1 l1 c/ o3 N( J5 g) Q
    CSR = 0x0000;
! `+ t. `. [+ o& ^$ C: i) L    INTC_INTMUX1 = 0x3d;
( |  ~- J" c/ T$ x7 {    ISTP = (unsigned int)vectors;; |2 l7 R1 n. B# _! V
    ICR = 0xFFF0;  
. v" e- U) L( N' w9 k) h& }    IER |= 0x12;  
+ P6 Q( `$ L5 W8 k" `; v) v; L( j    CSR |= 0x01;  
# ~$ V' O" q1 }% k& e5 d( r& ^( {1 |' W5 Z0 i0 I3 v) u6 s+ ]2 h$ F

3 Z, R/ z' O/ Z; K# Y5 u# H* W8 d: V, E2 V2 ^9 o: ]$ c# r
还有就是两个输入输出函数:6 Q. d* z0 M% j, g# T. u: V4 {) `
void output_sample(Int32 out_data)! \9 u& i6 R* ~5 F
{
0 B; O- [6 |7 e2 s  AIC31_data.uint = out_data;  
+ @# J! |$ H* `! F' ~: p  MCASP1_XBUF5_32BIT = AIC31_data.uint;
, N- b! r) Z- ]! W! h8 `}
7 U, h- b! g6 G2 Y0 F' L% m' N- X4 ~0 s5 N: ]( W
Int32 input_sample(void)
% p- S* |: P/ p8 y2 j" |7 l* r{  
/ ^9 L$ Z- l, ?" S& L  AIC31_data.uint = MCASP1_RBUF0_32BIT;
+ {* r$ G! u' Q3 I  return (AIC31_data.uint);# t) a; k9 i% w' ?0 R" [5 M6 c
}! l; }2 T9 e9 u- P" Z
- E/ i9 S. y& r! F
分享到:  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-12 17:38 , Processed in 0.051284 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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