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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
6 l* ^, L! L& y3 Lmain文件:3 U" \& V/ }" ~4 J
interrupt void interrupt4(void)  ' I, I+ s* J7 C1 u
{' j0 N& c8 H+ }( U, v6 B
  Uint32 sample;
* O1 r" A- d& R6 h0 Y3 t& `5 |8 {7 g' |& k' I2 n) O- g/ l7 L: m: l/ c
  sample = input_sample(); // read L + R samples from ADC0 C1 a, F) Z2 \1 l8 |* b# x4 n) P
  output_sample(sample);   // write L + R samples to DAC
$ L0 ?" g& Z6 m: `: G  return;, g0 u! w$ M! b2 W5 C% Z" A% {- g
}% k! D7 _/ [5 @* h8 p, }% v$ h

! r2 |+ ?0 w1 u* A, W8 S) W3 Gint main( void )1 C; T* w- N# N, i, v9 ^; x
{
; v9 D0 Z  L: d! l# p; B. w9 V8 Q2 m  @5 \  K' {
    /* Initialize BSL */- t* E! p. M  Z5 C6 v  Z) M
    EVMC6747_init( );. Y9 Z' {, v2 `4 c! G! j! [
        /* Call evmc6747_intr function */  W" ^$ L( L- W# z6 a5 u, ^
    aic3106_init( );
" S+ Y4 f0 P3 X6 D  w( u        while(1);
! o; K2 q* ~) i! U$ Y}" B  A: A- j  c
/ G. @/ O3 Y$ r9 l$ N, [/ e

' e4 U( W0 h2 E; haic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 [, V7 ~0 }' B* v! z/* Initialize MCASP1 */
' }( m4 y+ }. A, ^0 ^% d! o9 M    mcasp = &MCASP_MODULE_1;# A9 K8 k- w4 ]
    mcasp->regs->GBLCTL  = 0;       // Reset
3 f! I  |/ s: J! s/ N1 }+ L    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 I" q% M. f. L2 f    mcasp->regs->XGBLCTL = 0;       // Reset TX
. o! k7 m0 c% a' E* @    mcasp->regs->PWRDEMU = 1;       // Free-running
' a5 Z# e. G5 k: \   // configure McASP0 receive registers3 O( n5 `. K1 j! @
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used* p# \9 n$ a8 V- z" }" f) [
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
9 X/ ~5 m3 E/ v, S3 R    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
, Y4 o' Z: w& }. S/ U' ?    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)  ~+ d& C9 H. Z, [, d
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
0 E! r! j! N% F9 s. c    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1, C: e) e5 w6 K  X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used% @" m7 p$ R+ q% G
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2563 E% y2 s( o$ G

3 N6 C, F5 L" p: E4 ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
6 ^8 ?% {' W! g0 ~! f    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus5 a) {; Y7 H6 n9 \9 A' D
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word, V, V1 A1 S9 n3 v2 u1 c) z! |+ K. ^
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
4 [& `* l9 Z: i4 n- l6 m# ]    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
3 s/ \" Y/ x( A  E3 y( q+ [& v! z" j+ L    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. ]. K2 g3 b4 D8 ?6 T/ e    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit. m: g! v! T8 Q6 X) O
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
  B7 [) W6 L0 h9 l  q! T9 W7 Y1 `# }! f- T7 A1 \; o- k% @7 u" b" e
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ Q# R9 i8 e" @* R/ Q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 h9 s6 K7 F* }# b# l    mcasp->regs->PFUNC      = 0;          // All MCASPs) z+ t1 X3 P  T2 o3 G
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& \0 ?3 d% @$ V0 f9 F0 O7 N: U& I& T0 e* M2 I3 l' T
    mcasp->regs->DITCTL     = 0x00000000; // Not used/ l; N/ [9 n+ c) k
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
/ t1 ~4 m( D* C& a8 G0 m. V    mcasp->regs->AMUTE      = 0x00000000; // Not used' u1 G- A6 E$ ?/ s4 f

% E( U9 a! d9 ~2 C: H. g$ x% C' e* A/* Starting sections of the McASP*/
( ?( W, k2 W) o# _    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ; j; H% Z4 E2 [" m, t; t3 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  + E, Q6 ]  @3 u+ v4 A% p8 A
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 U& Z# W3 L4 K1 s8 o, u    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 U) _' q/ T& |" [

+ A6 q6 b' u& F! K- j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
) v* n4 A+ n: i" d6 g( a    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );, Z3 V4 k2 F5 N4 e9 {
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; * H# X2 J0 T/ s- E( {* t' P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
, H2 ^/ p; m6 r& h; l3 {
: R2 r' B$ q- N6 O    mcasp->regs->XSTAT = 0x0000ffff; 2 e% Q" N5 X: E" j
    mcasp->regs->RSTAT = 0x0000ffff;
. S5 h9 \5 `3 I3 _$ n: f0 |8 W8 {: D) x) H! ?" M
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 v( Q- I' N3 B- i9 A
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );( W3 ?- z9 d, u& w, K
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ }( W* I  @/ s# @' o3 k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );3 R) }" |9 ^# N8 ?

4 e. M- |- o+ }    /* Write a 0, so that no underrun occurs after releasing the state machine */" h# G6 Z7 L4 t$ P! T. L+ J% n
    mcasp->regs->XBUF5 = 0;$ o- L4 w0 n- f) ?
    mcasp->regs->RBUF0 = 0;
7 Q3 @' Q7 Z; G( t4 N' p; J
! [6 X+ L6 T; v5 t% S  O: ~! {    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 b) z! L4 Z% t% U' ~9 J
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 r8 r( H9 H# b" h$ e4 V0 {
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, T+ i$ j/ A  Y9 }0 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 d/ l$ ?0 M! n

! P0 r; H+ J, Y& D. v& ~    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
0 g' o/ y- G6 B7 g8 E+ d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );/ s% O) g9 d9 x. _
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; / I8 A& e5 w" _4 e1 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );- h! t5 R7 ?* X6 m- b' d+ u) u
8 V0 }% Q6 e+ }- F8 G, @
    CSR = 0x0000;
) W- s- H/ z* e, C    INTC_INTMUX1 = 0x3d;
4 l, j- u. o2 b* x    ISTP = (unsigned int)vectors;' X: T# ~8 _6 j/ D4 B' v6 h
    ICR = 0xFFF0;  
9 q* U& m+ v8 J/ d& v' n) Z    IER |= 0x12;    x3 l/ w7 I3 ]& a0 a! w
    CSR |= 0x01;  
, d7 f1 g, d& J- C7 A& S) n/ G# h1 R& H! j. i6 `
$ k! ?# G1 p) g8 l

' T: y6 e9 A2 H& E) t还有就是两个输入输出函数:
/ U, G; A. G1 ?  N5 C" u! Nvoid output_sample(Int32 out_data)
8 ]$ y' e, F3 V; y' C( A8 c{
7 ~; \# s0 T2 D# y, E  AIC31_data.uint = out_data;  1 G$ X9 i5 U& ]4 Q/ q
  MCASP1_XBUF5_32BIT = AIC31_data.uint;, W6 {: Q! `# V6 h. U  _
}
3 ?2 {- w2 a; h% d+ c3 c/ x/ f& i, w+ k, i. H  r) K
Int32 input_sample(void)
! U3 m! \9 r9 m: i" }0 |{  ! O( |9 O) }. P$ D8 k8 }
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 d6 F# r4 Q' C! l. Z- W& c9 u  return (AIC31_data.uint);2 S! B5 s% m1 ~/ H* v, I; a
}
% O* V, @. @( [$ |' F, p+ J* w" W" B/ ~8 J/ d0 d* a; W& N, t2 p
分享到:  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-20 09:46 , Processed in 0.037849 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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