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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:9 i& Q0 |% i& h* E3 S7 }
main文件:& G3 P) Y0 r" J$ m& F+ Y4 b
interrupt void interrupt4(void)  
! U& ], e( S1 K' S# B. c. ~{
' D  w! `% p$ r+ n8 V% j5 \  Uint32 sample;
, Z$ V8 B* S( k; v6 G6 U3 |, {- w5 e' H5 Q/ K  k# C) e
  sample = input_sample(); // read L + R samples from ADC7 C' Z' w0 _$ }& I' y+ s4 q
  output_sample(sample);   // write L + R samples to DAC 1 c' A0 B" d; U. ]( d( c9 p; ^* a, o
  return;
; d* t: N5 v+ m: \/ ?}
4 q; r7 n$ m  W2 ?0 R* m+ P$ S) g" G; H8 n8 B4 w# H, p
int main( void )
& x5 A8 U- S9 p% Z% Q* m{# c( O2 c  x& J

. |; o4 c& D, C$ z! F    /* Initialize BSL */3 s+ a8 K) z0 d! ~: R" e9 E8 f: m8 h9 r3 J
    EVMC6747_init( );( {( y; b& ?8 l- y6 V
        /* Call evmc6747_intr function */& m, B1 j; v1 [& z2 e% _
    aic3106_init( );0 j; T, S" R) e! v+ z' Z1 V
        while(1);
9 r& V( b8 A0 a6 Q}/ k8 n5 I) i# R7 Z
4 y# [8 r- I7 p0 G

, ]5 }4 I5 q0 j7 Y( ?  Z' Oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* R2 |; w3 B$ W# }7 N/* Initialize MCASP1 */
  ]0 E3 [& a; J0 L: X    mcasp = &MCASP_MODULE_1;8 ~- P: v8 ?! r4 k* k# y9 }# O
    mcasp->regs->GBLCTL  = 0;       // Reset9 V8 z3 U3 ~7 ?' R6 L! _
    mcasp->regs->RGBLCTL = 0;       // Reset RX6 V* S) y) k: N5 R% U0 j
    mcasp->regs->XGBLCTL = 0;       // Reset TX* |: R: r  l8 ?
    mcasp->regs->PWRDEMU = 1;       // Free-running, m/ J, V$ u9 P) \$ g3 w* y: k; L
   // configure McASP0 receive registers
( q7 }3 B) o8 I    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 E; Y# c, J6 L; ?1 _
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 k7 h5 f7 O& K: o6 _# c2 ^7 j    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
1 A+ X& S& Q2 {! K. Y. a    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
% y. s, d" \$ S" D4 L( y9 r1 W    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
2 N1 f- t3 M  L( ]8 S3 }; r* y    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
) y2 r* C% d3 Z8 s- e    mcasp->regs->RINTCTL    = 0x00000000; // Not used
4 M% s8 y" Z- L" T0 G8 T1 `    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2565 C& B7 n4 Q; L) y) Q: V1 [3 R! o
0 x7 P8 Y, P; M: z% X# f
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used( p/ O7 W) b& k3 E5 Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 ~0 z6 r: K- P& W( ]! P. V0 N" o! A    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word$ E3 C9 n" U. d$ L) a- J
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
) Y9 k# @0 T. ^- S$ Q7 `$ ~    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK2 I3 T( F- ]3 z% @2 |
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" m: N( R4 s6 i/ r, ^  G8 M8 Z    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit) M# A1 K1 h2 f5 _
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; ?  q& O. @. I' i/ o6 l. I4 Y: @" b/ n* K9 a" h1 N
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
5 ^  F6 l& K* C# M1 p# V! g' k    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
( h8 R) B1 ~+ {, f8 X8 v( f0 \    mcasp->regs->PFUNC      = 0;          // All MCASPs7 T+ a- W  c! @" H5 D7 ?
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 ?  C8 |0 p4 \
, x& F8 I! N+ k# `0 p  H3 h% C! ]    mcasp->regs->DITCTL     = 0x00000000; // Not used
; J6 g/ {2 o# P    mcasp->regs->DLBCTL     = 0x00000000; // Not used
6 m! ^; y3 `1 R& [/ c    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 a+ d8 d0 _( B% X( j0 \, y; a2 R& W! {- V
/* Starting sections of the McASP*/
" v% _1 l. E% F0 [/ V" r- ^    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
7 M( P2 h( D7 X. _    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 V2 J, a" U. }4 G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; / i# f; u: n, O# `8 p- J' r7 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ _5 S! N' Q2 `2 S
; G0 G; r1 z4 a+ O    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 5 v" i, k* Y0 Q1 Q& y9 U& ?9 ]  v
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
7 @# @, O3 c! m    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; # H  P1 M# |  ?5 p2 i* [
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );* t: w, m0 q2 }+ w0 Q* S  W% l" \& W: N

1 _2 Y. M6 L  r0 G    mcasp->regs->XSTAT = 0x0000ffff;
+ @- H0 ?0 W9 D6 P    mcasp->regs->RSTAT = 0x0000ffff; $ @* g' X* v' R$ O+ m- j
' s( c5 j% U8 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. t) R$ p; C3 Z4 |: l8 O8 o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );# b7 }. v. z' f" d/ P2 v
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 1 U7 T% Q. E: ^6 \  z+ ?  ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  l4 }" N) v+ g, ~8 f2 \* D. ], w4 W' S- ]' \) j
    /* Write a 0, so that no underrun occurs after releasing the state machine */
1 }! z1 X0 C$ J7 f    mcasp->regs->XBUF5 = 0;
- B) @1 f" _2 U8 P7 c. K    mcasp->regs->RBUF0 = 0;6 ]5 s0 d% j' [# F( y) ^

! d7 b, K9 ~* B4 |2 C% ~+ N    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " l' |: u1 a1 j! ~4 f0 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 d3 W. X/ Z2 Q; \6 P
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 8 d+ U/ C4 Y0 Y& I3 k( O  u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
- o# o3 w+ b- N8 t7 Y1 N' j6 V8 ~8 u
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 v2 ^, ]5 N( t5 u# F
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ q* T6 m& M7 h, W- Z0 Y2 n$ R
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; . n$ q6 M* S% }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
$ Z5 P9 Q7 D( n/ \- K+ B3 r4 \
( L: y$ j6 {6 }" M$ v* _" u    CSR = 0x0000;
$ c' I' ~6 d0 i" k    INTC_INTMUX1 = 0x3d;
. T9 d+ b7 ]9 s- C; i    ISTP = (unsigned int)vectors;* F" M. ~$ C* B% s
    ICR = 0xFFF0;  . X, B- B  z- X% _5 h4 n
    IER |= 0x12;  : L# d1 d- P( @7 u
    CSR |= 0x01;  
7 P9 O. d) q! E# r$ b
* P' }: K8 ^" S' t- b4 ~* D, x% P: a7 a8 W) Z

( s  D1 D, a  B5 I- J& g4 ^还有就是两个输入输出函数:1 \3 I3 F8 Z% z6 G" W
void output_sample(Int32 out_data)" d4 j3 l7 t( E, `: k5 L' x
{
, e0 \$ N2 u6 b  AIC31_data.uint = out_data;  # \; i2 O5 @0 Z/ E; e( A: L9 }
  MCASP1_XBUF5_32BIT = AIC31_data.uint;. _) i% J0 ~7 N. ^$ n2 ?
}( m, e: X) p5 \& V" s

/ C  S( \/ B& ]4 l5 e2 _" HInt32 input_sample(void)
3 J, }% `' A3 [" `: {2 z{  , G+ T. l5 v& J& F4 u. U) r& m
  AIC31_data.uint = MCASP1_RBUF0_32BIT;- e  \% p; Z/ x3 a+ P0 T0 r
  return (AIC31_data.uint);+ N  P: M1 J$ I" i, o
}
4 _/ X9 Q) j$ t6 o! z/ b! L( r, J2 [8 T
分享到:  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-16 10:48 , Processed in 0.048952 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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