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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; r- T- O. A7 j1 n- |: B8 ymain文件:# w  c- p6 N% o0 L8 D; z/ V
interrupt void interrupt4(void)  
9 F, p: ]8 o1 z) j4 r: C{
& e7 {1 [9 b1 p' q2 P  Uint32 sample;; F: u" d, `6 ~; C1 q/ W- {, n/ F3 X8 w

! j0 s  H' ?- x; ~) P  sample = input_sample(); // read L + R samples from ADC
$ A- q0 j6 U3 ~3 g/ e; B  output_sample(sample);   // write L + R samples to DAC 9 G( Q( \0 w1 z) K
  return;
: [5 f1 M# K7 Y" Z4 }}% f$ Q3 v5 W5 S9 j( i0 `) V

+ i/ G+ l8 c* r) r+ b2 Pint main( void )# e1 U6 H* n& M* B% G4 L
{
' X$ `  a8 z% A7 J
4 R( n3 q5 }. }4 w& u    /* Initialize BSL */! ?% ~" Q% `6 i( W0 C( x
    EVMC6747_init( );
8 {5 H5 {3 p$ k- M" k        /* Call evmc6747_intr function */% Q% O4 e9 x; K( `6 _0 \
    aic3106_init( );' h; s) W4 l- m# B) c
        while(1);
" E. J, [( e3 C4 Q4 {1 C  x% ~/ v}! x& s9 L  n' |

0 H1 ?) h: d# n& u7 D2 t. F
. _! {% a1 {3 w/ {+ V) L( O) n* Q1 W8 @aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
) v# n1 Z. x' Y6 {- `' m/* Initialize MCASP1 *// Y& t' T% d% J( P
    mcasp = &MCASP_MODULE_1;  v) g5 p3 ]) f5 A7 ]$ m4 y' `0 L
    mcasp->regs->GBLCTL  = 0;       // Reset3 p! z( C# a0 x1 {
    mcasp->regs->RGBLCTL = 0;       // Reset RX
3 N4 y% N8 ?/ y6 f    mcasp->regs->XGBLCTL = 0;       // Reset TX
6 p; }! Q' k1 `" R- a; s    mcasp->regs->PWRDEMU = 1;       // Free-running
: i6 j! E* K/ h" }9 d9 e8 N' B" y   // configure McASP0 receive registers2 @; W' ]1 {3 p1 C% o
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 X+ ^) M' d$ M( y5 A
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
: a5 }6 b0 B, j  W4 V" O    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
4 e3 C2 c! ^& R) ]; d0 j2 P1 ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  a( f& W0 G  c# r( S3 o+ a    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: p% u. z& Y, q/ K6 @    mcasp->regs->RTDM       = 0x00000003; // Slots 0,11 Y" F( k9 J9 M* W  o
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
& r% U% x+ G& F    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* Y3 O: o; u3 [( D- T! w5 Y3 c
# ~! B7 S# T; u$ ^* K    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
1 o! C. t! L: [. p3 d! f    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& N9 b/ W9 F7 j" l7 F! m    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
1 T) E7 V. k1 Y    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: ^8 x5 ~7 {3 x2 c6 d5 Z9 t2 h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 \) M  t! }" W    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1) }5 N7 W& V& O2 [7 v" }" u- |% S
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit8 R0 C$ G) \0 \& r0 r/ n# z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# j' l* L$ h( n% _8 d

/ c7 C* l) H$ |* I6 T6 B    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
. {; D' `" w: t9 e: y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
7 R9 N& c& O( U3 J    mcasp->regs->PFUNC      = 0;          // All MCASPs
( [, e$ Y) }8 ~+ o) V# E    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1& }- \/ H7 c, @4 U1 W

; n+ R, N: S  F  I2 n    mcasp->regs->DITCTL     = 0x00000000; // Not used( d6 R8 ?' F  U* ~) D
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
7 s' [3 M. w$ ~1 Y    mcasp->regs->AMUTE      = 0x00000000; // Not used
" H# l- I' J8 y$ C9 x3 f+ r
# S- e5 l  C1 T# k: g: I& \/* Starting sections of the McASP*/
$ @- ]4 _. b7 @4 }2 q! |$ }2 Q: D1 V    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ m! e6 [. y% j$ ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  * i* V# y9 Z8 C9 M# V
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
# r. D8 D* Z- Y% @. m    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! ?. }9 p4 n( m* r& o; I( \0 d# C2 J) v2 |1 I3 S
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
& V% k/ M) l. m- F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
  E& `6 F: t4 E2 u0 A: {    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ' T% [6 M1 u( D7 a* g* _2 j( h3 D; \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% J- H- x, ?: W$ ]( V( O

, E. n, j  u3 E5 n! W3 m  j: C% {    mcasp->regs->XSTAT = 0x0000ffff;
/ Z0 y$ q3 R! H. }, h8 ^    mcasp->regs->RSTAT = 0x0000ffff; * Y2 j) Y, _( g: g
. {  h8 F! s2 `( ]( v
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;& K$ z5 s8 N! r% P: I4 Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );6 J2 ?: l. p$ G- H% I' S3 F0 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; & C) a! v4 j) @9 o. c  r$ k- P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
/ X+ ~$ `3 T# s3 E7 I. v/ m9 M2 C* K3 v) ?( k% _( t
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' R8 R( E3 r5 H2 U4 r, W; q& f% k  d    mcasp->regs->XBUF5 = 0;) P0 s' K2 W+ o. F8 F
    mcasp->regs->RBUF0 = 0;$ r- o9 T* ~8 }

3 G8 J* @) d. w# u# k% A    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 5 m5 L3 ^3 }% X  X. P2 X' K
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
2 W$ u1 l6 \5 w4 X. A9 h    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; n. E3 n8 A4 x' B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 h( b  E, l, h, ?( ]+ M% m
0 ?" L3 W" ]2 F% P5 D% n0 H8 d7 D    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- y, H* p1 w% D1 g  R. W" C) ^+ g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
  M2 {5 s8 w! W9 f( O    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 D' @# }( Q- [! N; X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 {) t# `) n; _" r4 N

3 F) P9 n+ l6 S- `5 T    CSR = 0x0000;+ P- y, _3 q- V% a
    INTC_INTMUX1 = 0x3d;/ t" Q5 G5 E* o( q) i& c1 y
    ISTP = (unsigned int)vectors;5 r- Y1 K# K6 P4 x8 C% r
    ICR = 0xFFF0;  
9 @6 i" v6 B) c! }9 b2 R3 i2 x3 d    IER |= 0x12;  : H# b  o( `0 Q$ P& G; Y
    CSR |= 0x01;  8 D6 N9 G, Z6 s' p- L
/ X( d) V; @: y2 f0 o

* v# |+ `  x. l& p) F, L; Q9 F- ~3 _7 ~1 I" a
还有就是两个输入输出函数:0 ^0 t" t+ `% f0 w  Y
void output_sample(Int32 out_data)
1 W" v" U* e) q& h6 d. M{
0 g( t3 o) i/ N2 _! o! I  AIC31_data.uint = out_data;  
7 x5 L# @- d; D2 f  C% d" X( I  MCASP1_XBUF5_32BIT = AIC31_data.uint;
- f) A9 E6 C1 P. s0 D4 a}, g) D2 ]! b/ i8 O5 b4 A
1 s7 D0 Z/ X9 q6 e6 v
Int32 input_sample(void)
+ P; j' a; N! P) q4 ^  \{  2 G" x  d* I9 p- T
  AIC31_data.uint = MCASP1_RBUF0_32BIT;  W# F& d. z; O  p
  return (AIC31_data.uint);
. I6 L# Q) h4 E. g" L}( G( x# Y. K2 a6 A: L6 |0 @% f% G
; L2 v# L% f( R3 z
分享到:  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-1-25 19:11 , Processed in 0.045324 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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