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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
+ |: Z$ k% K9 m: tmain文件:& _  X7 u! S5 H# A# C
interrupt void interrupt4(void)  ! b0 c" G+ t: ~6 L4 D) _9 c: `
{
/ I6 b, }* G  {# ]  Uint32 sample;( ?6 I- a5 C9 U0 T. c  N* ]. b# D

8 K8 Q! u  E7 H" t" n  sample = input_sample(); // read L + R samples from ADC
' i+ z4 L- n$ l. m* e* G0 q  output_sample(sample);   // write L + R samples to DAC
+ f$ O2 F; @9 G/ F1 k2 [/ I  return;
2 U, J7 E( o6 m! l4 R, v9 t}
( P# t0 ]4 h6 ]" @* N$ X
) d* K  |' r; I7 N  |int main( void )
; {8 M& u" w) `' d{
/ V8 I( b+ |- N$ l
& y( P& B, L) y    /* Initialize BSL */8 I! L" P  @* J- p
    EVMC6747_init( );4 U2 x6 e& n+ j# A2 ]4 }
        /* Call evmc6747_intr function */# @* P' `3 G- l! ?. f8 E2 j! g
    aic3106_init( );8 n, v0 b, ^! w0 z- G
        while(1);; @0 ]/ M; L: B2 C
}3 u$ f  F0 F# A- a

! }. p: m3 r! H2 J( N' B3 Y, U) {% @# @2 V& x0 [# `, W& e/ W
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题# j3 A# R: }- ~0 o5 G
/* Initialize MCASP1 */
/ _: p' S6 I+ N6 }% ^7 O9 O. C3 w2 h    mcasp = &MCASP_MODULE_1;
9 q8 r) c( {) o9 r/ b8 y$ S2 G    mcasp->regs->GBLCTL  = 0;       // Reset
, F' [' C1 h5 v# c: I0 ~    mcasp->regs->RGBLCTL = 0;       // Reset RX$ ?" K  n( ]1 {- j3 F
    mcasp->regs->XGBLCTL = 0;       // Reset TX
1 |9 b+ ]! ^8 x+ \7 @6 J    mcasp->regs->PWRDEMU = 1;       // Free-running0 D$ n( n5 Q, Q' I/ z/ K1 M  Z
   // configure McASP0 receive registers
. p( t: S' F! P5 w' w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
8 ~: y( X* l" \* M3 S    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
5 @2 n+ f1 P- v3 j: _    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word' j' _/ V$ T( j* k! J* Y. \0 b1 ]+ M
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
5 \. p1 t5 |8 [4 B! V" _    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)# R  C& q3 D6 W1 g: A" t. ^( J
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
, q! e: t9 I9 n# N4 s1 c    mcasp->regs->RINTCTL    = 0x00000000; // Not used; z2 \/ Z# l  T1 d' \
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' r5 E4 D- M& L* |; U5 r: G

/ p& Q% Q5 S3 X( i" p0 A& |0 U    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
9 I6 A3 U/ m9 L# m    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus2 |: G! v/ n0 d, R+ Z2 Z+ _
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
- e4 X4 d+ Y( o' C+ z/ c    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
2 }. l* s6 p  `  b% l% p, H4 U    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK5 |: @  d/ H. E0 d; y; J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 `6 s% k1 a- ]* ^1 m. U    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
- y' m4 x+ Y, U1 r    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 k) Z- e& t5 a8 l3 c) g! F
5 e( d* S. @% ?' @& v7 W    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
- ]8 Q, E1 G) W0 L  a8 n    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
+ ~5 y9 c; C' [, `    mcasp->regs->PFUNC      = 0;          // All MCASPs2 ~& R9 u) [) l# K3 m, e9 {, e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX15 Q1 ?( V) l0 `& A' K, U
% K6 z+ r  Z; q( _. m+ W
    mcasp->regs->DITCTL     = 0x00000000; // Not used0 V& m" l9 j3 D: o
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 ~  Q5 [" |& Q$ o% }3 m    mcasp->regs->AMUTE      = 0x00000000; // Not used6 Z* N+ z& m2 ^! }
3 [- h- E& x2 y' M0 T. J# s
/* Starting sections of the McASP*/
8 E% Q6 @# Y! H6 h3 P3 x    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; 7 n. l- p/ l/ Q& }3 U1 ]
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  6 K4 o5 b" w& @4 U  R3 ~, [) X
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
& q. F5 L5 p' S5 N    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );+ T7 x2 p& |! g/ P4 B0 a. O
; f/ Z, M7 ?# O1 P) e' G+ ~1 `
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; # ^& {# ^& J# F5 `  D
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );9 @% x) p4 l  a/ d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- G  b4 ~' J( S) Q* v+ u2 {. K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );' h. O5 H! L5 P3 q' U/ b+ U
7 g5 C. E0 E+ L  g0 {% O+ F" }
    mcasp->regs->XSTAT = 0x0000ffff; ; H3 m; p; V6 v' U# ]
    mcasp->regs->RSTAT = 0x0000ffff; , I4 Y+ p* p1 \) B# S

+ s4 k! {! I. Z8 }0 n% T. D8 d    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
. u- _; z; y& [( o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
; A4 L, I: w7 t& r! w9 X    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 f0 m3 \: {0 d% T
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );  h9 l% P2 s/ l4 z$ f  h; Z

2 X" T  t. P+ K/ u6 i    /* Write a 0, so that no underrun occurs after releasing the state machine */& S6 ~: O: F/ [0 V0 j% A0 s- z
    mcasp->regs->XBUF5 = 0;5 p5 S, ~8 ?1 d8 m) g
    mcasp->regs->RBUF0 = 0;
3 i' L* o+ ~; j+ e7 D
  P8 x5 s% g* l8 ^- o    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 z+ q4 X+ ^3 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );$ ^/ J. b! P( i+ f3 D1 d' l8 }( A% p
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
) ^$ @- _; L: V5 J8 V9 \- S& C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );& g" K' z) F* A1 I7 c/ }9 }: p
5 C1 Z6 T' [/ g# e
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ D' _# G9 ^" h  d  S* U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 R* b# _  [+ x9 V2 t1 F
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; , `/ g4 b2 k. z* I8 `
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# R0 N2 D' o$ L2 P: Y8 b! Y3 a
    CSR = 0x0000;
- c6 D9 H' U+ d5 ]8 u# s    INTC_INTMUX1 = 0x3d;. Z& t9 X1 r: p& O* o
    ISTP = (unsigned int)vectors;
* o/ |, U5 i; r9 ]2 e6 O    ICR = 0xFFF0;  
2 E9 e1 Z; H  i& @/ B$ A    IER |= 0x12;  
3 z6 K( |" S+ e$ U, l/ C# B    CSR |= 0x01;  
3 h$ u5 C2 E2 W- @% \. I7 E0 t; E  M7 ~( i/ X0 [" y' ?
: p6 v: Z+ K5 P* E# A2 p. d

' y6 z( @: g  y还有就是两个输入输出函数:
1 O, ?3 s% L! Y5 fvoid output_sample(Int32 out_data)
! m5 C! s; {" D! Z/ i{
  ]( u' c& j2 \0 B  AIC31_data.uint = out_data;  * \& e* ]/ f0 t) h, W9 g
  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 t' n5 N) [# G  a6 ?" e
}
" Y. Y/ y0 E' n0 \$ w) h! p
8 t5 K3 g8 R& d* p/ J" s0 v( PInt32 input_sample(void)
$ x) L" o; `" i5 l{  , W( J; M" U7 X5 d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;8 ]. m" D3 M- ]- A' z% _$ W
  return (AIC31_data.uint);* p6 m$ i0 Z4 C1 D9 u' D/ v+ S
}
. h1 I' {5 t- u1 s' M1 D2 ~6 I8 w0 }4 r( T2 ]. 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, 2026-1-23 05:21 , Processed in 0.041042 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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